Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   PHP Session Problem mit Frames (https://www.tweakpc.de/forum/programmiersprachen/27789-php-session-problem-mit-frames.html)

HyperY2K 07.09.2005 14:40

PHP Session Problem mit Frames
 
Ich hab eine Frameseite (ja es muss eine Frameseite sein), die um Sessions erweitert werden soll. Ich benutzte $_SESSION. Solange ich Cookies aktviert habe, geht alles super, schalte ich die aber ab funzt das ganze Session-Zeugs gar nicht mehr. Hab auch bei jedem Link SID und im Frameset SID mitgegeben.

Hat jemand ne Ahnung woran das liegt?

edit: ich bekomme immer eine neue SID, wenn ich die Seite neulade...

smoek 18.09.2005 13:58

AW: PHP Session Problem mit Frames
 
Das liegt daran, dass der Server normalerweise die SID in nem Cookie ablegt, damit er sie nachher wieder findet.

[quote=php.net]Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt.[/quote]

[quote=php.net]Es gibt zwei Methoden, eine Session-ID zu übermitteln:
* Cookies
* URL Parameter
Das Session-Modul unterstützt beide Methoden. Cookies sind optimal, aber da sie nicht immer zur Verfügung stehen, bieten wir auch noch eine Alternative an. Die zweite Methode hängt die Session-ID direkt an die URLs. [/quote]

[quote=php.net user comment]
Session ID's wont be carried over through meta refreshes, so make sure you add the variables (in GET format) to the URL.
IE )
[code]<meta http-equiv=\"refresh\" content=\"1;URL=index.php?PHPSESSID=$PHPSESSID\">[/code]
[/quote]

also bei jedem Refresh den du machen lässt, immer ?PHPSESSID=$PHPSESSID dranhängen

cromelain 18.09.2005 14:04

AW: PHP Session Problem mit Frames
 
Es sind ja Sitzungscookies, die immer für ein Login benötigt werden. Also für die jeweilige Session.

Ohne diese zugelassenen Cookies kann das gehen, wie smoek schon sagte...

Naja, er hat besser belehrt ;)

HyperY2K 18.09.2005 17:20

AW: PHP Session Problem mit Frames
 
in der theorie funzt dass auch, aber die realität mit frames sieht anders aus:
Ohne Cookies funktionieren Sessions (in PHP) mit Frames nicht, weil die frameset-Seite ihren Header bereits geschickt hat, bevor die SID per session_start() der Inhaltsseiten überhaupt gestartet wurde.
In IMHO funktionieren Sessions in PHP über Frames [B]ohne Cookies nicht[/B].

BenniG. 18.09.2005 21:40

AW: PHP Session Problem mit Frames
 
Irgendwie versteh ich dein Problem nicht so ganz, tritt das mit der neuen Session bei jedem klick, oder nur beim Aktualisieren auf?

Beim Aktualisieren tritt das ohne Cookies wohl immer auf, egal, ob du Frames benutzt oder nicht! Was du machen kannst ist in der Frameseite eine Abfrage:
[CODE]
<?php
session_start();
if ($_GET["PHPSESSID"]=="") {
$PHPSESSID=session_id();
header("location: ".$_SERVER["SCRIPT_NAME"]."?PHPSESSID=$PHPSESSID");
}
?>
[/CODE]
Dann wird in der Url oben im Browser auch die SessionID angehängt und du kannst sooft Aktualisieren wie du willst..

smoek 18.09.2005 21:44

AW: PHP Session Problem mit Frames
 
Wie wärs, wenn du aus der Datei, die das Frameset lädt, ein PHP script machst und gleich session_start() vorne dran hängst? Und in den <frame> Tags auch als Verweise natürlich immer die SIDs mit hin

HyperY2K 19.09.2005 07:18

AW: PHP Session Problem mit Frames
 
[QUOTE=BenniG.]Irgendwie versteh ich dein Problem nicht so ganz, tritt das mit der neuen Session bei jedem klick, oder nur beim Aktualisieren auf?

Beim Aktualisieren tritt das ohne Cookies wohl immer auf, egal, ob du Frames benutzt oder nicht! Was du machen kannst ist in der Frameseite eine Abfrage:
[CODE]
<?php
session_start();
if ($_GET["PHPSESSID"]=="") {
$PHPSESSID=session_id();
header("location: ".$_SERVER["SCRIPT_NAME"]."?PHPSESSID=$PHPSESSID");
}
?>
[/CODE]
Dann wird in der Url oben im Browser auch die SessionID angehängt und du kannst sooft Aktualisieren wie du willst..[/QUOTE]

das funktioniert im Frameset, aber nicht in den Frameseiten, weil der Header da bereits weg ist..

Das Problem ist ja eben, dass man session_start() sowohl in dem Frameset, als auch in den Frameseiten braucht...

smoek 19.09.2005 07:40

AW: PHP Session Problem mit Frames
 
Also erstens:

Die einzelnen Frames haben jeweils eigene HTTP Anfragen, also werden jedes mal neue Header gesendet.

und zweitens:

Wo steht, dass man session_start() nicht aufrufen kann wenn die Header schon gesendet sind?

also machs doch so:
[php]<?php
session_start();
?>
<!DOCTYPE .... >
<html xmlns... >
<head>...</head>
<frameset ... >

<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />
<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />

</frameset>
</html>
[/php]

BenniG. 19.09.2005 08:18

AW: PHP Session Problem mit Frames
 
Genau, so würd ich das auch machen nurnoch die kleine Umeitung rein, falls man jemand auf die Idee kommt den Aktualisieren-Button zu drücken..

[php]<?php
session_start();
if ($_GET["PHPSESSID"]=="") {
$PHPSESSID=session_id();
header("location: ".$_SERVER["SCRIPT_NAME"]."?PHPSESSID=$PHPSESSID");
}
?>
<!DOCTYPE .... >
<html xmlns... >
<head>...</head>
<frameset ... >

<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />
<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />

</frameset>
</html>
[/php]

Und wie smoek schon sagt hat jede deiner Frameset-Seiten und auch das Frameset selbst einen eigenen Header.
Du kannst dir ja mal [url="http://www.digitalo.de"]digitalo.de[/url] anschauen, da hab ich auch ein Frameset und jeder einzelne Frame bekommt die (hier JSP-)Sessionid übergeben.. Das funktioniert problemlos, komplett ohne Cookies.. Allerdings gibts hier das ein Problem mit dem Aktualisieren *zettelschreibundnachhergleichumstell*

HyperY2K 19.09.2005 21:46

AW: PHP Session Problem mit Frames
 
[QUOTE=smoek]Also erstens:

Die einzelnen Frames haben jeweils eigene HTTP Anfragen, also werden jedes mal neue Header gesendet.

und zweitens:

Wo steht, dass man session_start() nicht aufrufen kann wenn die Header schon gesendet sind?

also machs doch so:
[php]<?php
session_start();
?>
<!DOCTYPE .... >
<html xmlns... >
<head>...</head>
<frameset ... >

<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />
<frame src="seite1.php?PHPSESSID=<?=$PHPSESSID?>" />

</frameset>
</html>
[/php][/QUOTE]

ich meine nicht den hTML header, sondern den HTTP-Header.

Sind das alles jetzt nur wage Mutmaßungen oder hat das schonmal jemand probiert? Ich meine JSP verhält sich da auch etwas anders, hab damit auch schon gearbeitet...

BenniG. 19.09.2005 21:57

AW: PHP Session Problem mit Frames
 
Probieren geht über Studieren ;)

Aaaalso, machen wir mal ein Frameset auf:
-Client schickt request auf Frameset.php
--Server schickt HTTP-Header + Seite
---Client parst die seite und findet 2 Frames
----Client schickt request auf frame1.php
----Server schickt HTTP-Header + Seite für Frame1
----Client schickt request auf frame2.php
----Server schickt HTTP-Header + Seite für Frame2

Die Striche symbolisieren den zeitlichen Ablauf, die Frame-Seiten werden NACH dem Frameset geladen (idR alle Frames gleichzeitg) und haben einen komplett eigenen HTTP-Header!
Warum solltest du also nicht in der Frameset-Seite die SessionID an die Frames weitergeben können.. Wenn du es so machst wie smoek und ich beschrieben haben funktioniert es garantiert!
JSP ist von der Programmierung her schon arg unterschiedlich, aber von der Frame-Verarbeitung macht es keinen Unterschied, welchem Server du SessionIDs übergibst..

smoek 21.09.2005 12:45

AW: PHP Session Problem mit Frames
 
[QUOTE=BenniG.]Probieren geht über Studieren ;)

Aaaalso, machen wir mal ein Frameset auf:
-Client schickt request auf Frameset.php
--Server schickt HTTP-Header + Seite
---Client parst die seite und findet 2 Frames
----Client schickt request auf frame1.php
----Server schickt HTTP-Header + Seite für Frame1
----Client schickt request auf frame2.php
----Server schickt HTTP-Header + Seite für Frame2

Die Striche symbolisieren den zeitlichen Ablauf, die Frame-Seiten werden NACH dem Frameset geladen (idR alle Frames gleichzeitg) und haben einen komplett eigenen HTTP-Header![/quote]

genau ! Der Browser kann doch in der einen Abfrage doch nicht riechen, ob da ein Frameset drin is.. abgesehen davon dass der Webserver sowieso nur eine Datei pro Request senden kann.
[quote]
Warum solltest du also nicht in der Frameset-Seite die SessionID an die Frames weitergeben können.. Wenn du es so machst wie smoek und ich beschrieben haben funktioniert es garantiert!
JSP ist von der Programmierung her schon arg unterschiedlich, aber von der Frame-Verarbeitung macht es keinen Unterschied, welchem Server du SessionIDs übergibst..[/QUOTE]
ja

Was ist denn JSP eigentlich? Was hatn das für Pro/Contra gegenüber PHP oder so?

BenniG. 21.09.2005 19:11

AW: PHP Session Problem mit Frames
 
Jsp sind Java Server Pages. Das heißt du hast Java als Programmiersprache dahinter. Der für mich größte Vorteil ist, dass man in Java recht einfach eigene Klassen machen kann und die dann sehr kompfortabel ansprechen kann. Dann kann man Programmierung und Webdesign wirklich gut trennen, der Webdesigner kann einfach auf die Felder eines Objeks zugreifen und muss nicht wissen wie die Daten da reinkommen etc..
Beispielcode (jetzt mal rein theoretischer Code)
[CODE]
ProduktListe pList = meineDaten.getProdukteInGruppe("HiFi");
//Hole alle Artikel in der Gruppe HiFi

for (int i=0;i<pList.size();i++) { // Durchlaufe die Produktliste
Produkt produkt=pList.getProdukt(i);
//Hole ein einzelnes Produkt aus der Liste

out.println(produkt.getPreis());
out.println(produkt.getBezeichnung());
out.println(produkt.getBild());
}
[/CODE]

bei digitalo ist es über recht viele templates aufgebaut, so dass der webdesigner dann ein Template für eine Artikelzeile in der Gruppenansicht hat:
produkt_einzeln_template.jsp
[CODE]
<table ..>
<tr>
<td><?=produkt.getPreis()?></td>
<td><?=produkt.getBezeichnung()?></td>
</tr>
</table>
[/CODE]

Könnte man im PHP ähnlich machen, wenns um sowas geht, aber für den Warenkorb hab ich z.B. eine Funktion
[CODE]warenkorb.addProdukt(produkt);[/CODE]
was schon sehr mächtig ist und selbst dem Webdesigner noch einleuchtender erscheint als
-Connect auf Datenbank
-Insert into Warenkorb....

Jsp ist wie PHP kostenlos und man kann es recht Problemlos bei sich zuhause installieren.. Hoster die JSP anbieten findet man leider nicht viele. Aber ab Dezember hab ich mit _Smash_ einen neuen größeren gemieteten Root - Server, mal sehen, ob man sowas mal anbieten kann

JSP hat z.B. als Nachteil, dass Änderungen an den Klassen bedeuten, dass man den "Context" (einen Teil der Webpräsens, oder alles, je nach Aufbau) neustarten muss. Damit ist der Server kurzzeitg nicht erreichbar und leider auch alle Sessions in dem entsprechenden Context gelöscht..

Ich persönlich finde JSP wesentlich besser, weil man schön objektorientiert programmieren kann und es auch gute IDEs gibt wo man richtig schnell arbeiten kann.. Ich persönlich nutze Eclipse mit der WTP-Modifikation/Plugin (gibts auf eclipse.org unter Web Tools Projekt) für JSP und Eclipse mit phpeclipse Plugin für PHP. Letzteres ist zwar lange nicht so ausgereift wie das WTP-Plugin, aber mann kann auch Autokomplettierung und sowas nutzen..

Benni

tele 21.09.2005 19:23

AW: PHP Session Problem mit Frames
 
PHP 5 kann mittlerweile auch wirkliches OO - sollte da also problemlos möglich sein. Ich kann mir auch vorstellen, das ähnliches selbst mit PHP 4 zu bewerkstelligen ist, wenn man aktiv darauf achtet design, business logic & output zu trennen. Allerdings zeigen alle mir bekannten PHP tutorials dies in keinster weise auf.

BenniG. 21.09.2005 19:33

AW: PHP Session Problem mit Frames
 
Klar, wenn man es gescheit aufbaut kann man wohl in allen Web-Programmiersprachen eine gescheite Trennung hinbekommen..
Aber Java/JSP/Tomcat hat für mich z.B. den Vorteil, dass man ruckzuck einen Treiber für eine neue Datenbank eingebunden hat. Dann gibts es bezgl. SQL schon ewig PreparedStatements (gibts in PHP5 jetzt auch) und das macht doch vieles einfacher und sicherer.. Ich bin halt eher Java-Freak als PHP-Freak, obwohl ich beides regelmäßig programmiere. PHP ist halt extrem verbreitet, von daher vielleicht universeller..

Grad noch eingefallen: Ein Vorteil von Java ist noch, dass man seine eigenen Threads machen kann, z.B. dass ohne ein externes Programm regelmäßige "Wartungsarbeiten" über das System laufen, sowas ist schon praktisch.

tele 21.09.2005 19:40

AW: PHP Session Problem mit Frames
 
ich glaube du brauchst weder mir noch HyperY2k die Vorteile von Java vorzuwerfen, da wir auch eher Java hacken als PHP (Ausbildungsbedingt). Das mit den Datenbanken ist ein valider Punkt - das nervt an PHP einfach unendlich. Wobei ich es gerade bei den ganzen fertigen systemen (Lanparty systeme, foren, etc.) sehe, dass die meisten ihren eigenen Datenbank-abstraktions-Layer implementieren (kapselung in objekte) - da kann man sicherlich auch was von verwenden (auch wenn es weniger auf dem niveau von Java ist). Weiterhin wird PHP im small & medium business immer mehr anwendung finden, sodass man denke ich ab PHP 6 ähnliches vorfinden wird.

HyperY2K 22.09.2005 09:16

AW: PHP Session Problem mit Frames
 
[QUOTE=tele]ich glaube du brauchst weder mir noch HyperY2k die Vorteile von Java vorzuwerfen, da wir auch eher Java hacken als PHP (Ausbildungsbedingt). Das mit den Datenbanken ist ein valider Punkt - das nervt an PHP einfach unendlich. Wobei ich es gerade bei den ganzen fertigen systemen (Lanparty systeme, foren, etc.) sehe, dass die meisten ihren eigenen Datenbank-abstraktions-Layer implementieren (kapselung in objekte) - da kann man sicherlich auch was von verwenden (auch wenn es weniger auf dem niveau von Java ist). Weiterhin wird PHP im small & medium business immer mehr anwendung finden, sodass man denke ich ab PHP 6 ähnliches vorfinden wird.[/QUOTE]

in PHP 5 gibt es bereits eine DB-Abstraktions-Layer ;-)

smoek 28.09.2005 17:14

AW: PHP Session Problem mit Frames
 
das mit JSP hört sich ja gut an.. dachte mir schon dass da Java dahinter steckt, wegen dem J.. was sonst
Da ich mich in java auch mal einarbeite und es mir bis jetzt sehr gut gefällt, hab ich auch schon öfter garan gedacht es irgendwie als webprogrammiersprache einzusetzen.

es ist doch sicher auch wesentlich performanter als PHP, wenns direkt auf der VM läuft.. oder? Gerade so Sachen wie Regular Expressions dürften mit Java schön schneller laufen oder?

Ich programmier auch mit Eclipse, bis jetzt hab ich da nur phpEclipse benutzt, und ich finde, allein dieses plugin übertrifft die meisten anderen Editoren bei weitem, solche Funktionen wie Codetemplates (nehm ich seehr oft für debugging, var_dump() zum Beispiel) oder nen so flexiblen Workspace mit Projekten, die man sogar auf FTP aufsetzen könnte, findet man nicht sehr oft.. und wenn dann nur für Linux ;)

Ich werd mir JSP mal laden und das n bisschen austesten.
Wenn ihr das mit dem Root wirklich durchzieht, meldet euch mal bei mir, dann miet ich n bissle Space was falls mir JSP wirklich gut gefällt !

Und: JA in PHP5 gibt es bereits eine DB-Abstraktions-Layer

HyperY2K 29.09.2005 07:26

AW: PHP Session Problem mit Frames
 
[QUOTE=BenniG.]
Aber ab Dezember hab ich mit _Smash_ einen neuen größeren gemieteten Root - Server, mal sehen, ob man sowas mal anbieten kann[/QUOTE]
Da wäre ich auch mit dabei, falls das okay wäre. Würde gerne mal wieder ein bissl mit JSPs, Servletts und Struts rumbasteln :-D

BenniG. 29.09.2005 07:35

AW: PHP Session Problem mit Frames
 
Wir kommen zwar immer weiter ins offtopic, aber geht sicher in Ordnung..
Also den Root-Server holen wir auf jeden Fall, da unser jetziger schon gekündigt ist (der neue hat MEHR POWER *hrhrhr*).
Ich weiß nur nicht, ob man den Tomcat so gut für mehrere unterschiedliche user konfigurieren kann, aber werd ich mir dann mal anschauen..
Wenn man zu hause entwickelt/debuggt und dann ne war-datei auf dem Root deployed ist das wahrschenlich das einfachste..

HyperY2K 29.09.2005 07:41

AW: PHP Session Problem mit Frames
 
[QUOTE=BenniG.]Wir kommen zwar immer weiter ins offtopic, aber geht sicher in Ordnung..
Also den Root-Server holen wir auf jeden Fall, da unser jetziger schon gekündigt ist (der neue hat MEHR POWER *hrhrhr*).
Ich weiß nur nicht, ob man den Tomcat so gut für mehrere unterschiedliche user konfigurieren kann, aber werd ich mir dann mal anschauen..
Wenn man zu hause entwickelt/debuggt und dann ne war-datei auf dem Root deployed ist das wahrschenlich das einfachste..[/QUOTE]

jepp, sag mir einfach Bescheid, würde mich auch an den Kosten beteiligen :-D

smoek 30.09.2005 15:15

AW: PHP Session Problem mit Frames
 
[QUOTE=HyperY2K]jepp, sag mir einfach Bescheid, würde mich auch an den Kosten beteiligen :-D[/QUOTE]

jap, ich würde mich natürlich auch beteiligen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.