Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Mi 16.02.2005 14:45
Titel PHP: Session später starten |
|
|
Hintergrund:
Es geht um ein PopUp, welches täglich einige Millionen mal abgerufen wird.
In diesem PopUp werden Informationen in mehreren Schritten gespeichert. Deswegen möchte ich keine GET-Übergabe der einzelnen Schritte machen.
Wenn ich nun bei jedem Aufruf des ersten Schrittes ne Session starte, kommt die Garbage-Collection von PHP net hinterher (es sind wirklich einige Millionen mal!) und der Server is mehr damit beschäftigt abgelaufene Sessions zu löschen, statt die Seiten auszuliefern.
Wenn ich nun die Session erst starten lasse, wenn auf "absenden" geklickt wurde, hab ich das Problem, dass frühere Session-Daten nicht mehr vorhanden sind:
Code: | if ($_POST["geladen"] == 1) {
ini_set("session.use_cookies",0);
session_name("session");
session_start();
echo $_SESSION["variable"];
}
(...)
|
Code: | ini_set("session.use_cookies",0);
session_name("session");
session_start();
echo $_SESSION["variable"];
(...)
|
Der erste Code gibt die Variable aus, der untere nicht. Bitte keine blöden Kommentare von wegen, Ist die POST-Variable auch wirklich gesetzt? JA, sie ist es!
Ich hab den Verdacht, dass es daran liegt, dass die Sessiondeklaration am Anfang der Datei stehen muss bevor irgendwelche header übertragen wurden! werden bei der IF-Abfrage wirklich schon header versendet?
Gibt es nen Trick, wie ich die Session erst nach dem Abschicken auch mit den Variablen-Inhalten starten kann?
|
|
|
|
|
Waschbequen
Account gelöscht
Ort: -
|
Verfasst Mi 16.02.2005 14:56
Titel
|
|
|
Ich weiß nicht wie es bei PHP läuft, gehe aber mal davon aus, dass es da genauso ist wie anderswo auch: die Session startet in dem Moment, wo die Applikation vom Benutzer aufgerufen wird. In dem Fall also mit dem ersten Aufruf des Popups. Und das ganze Schauspiel ist nicht beeinflussbar.
Was passiert denn in dem Popup? Ich denke mal es ist ein Step-by-Step-Formular. Alternativen zu GET und Session:
- Verschieb das ganze komplett auf den Client -> Cookie
- Benutze POST. Wenn der User nicht mit seinen Browser-Buttons klickt, kannste auch so zwischen den Schritten hin und her springen.
|
|
|
|
|
Anzeige
|
|
|
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Mi 16.02.2005 15:06
Titel
|
|
|
danke für die Tipps, aber in diesem Fall gehts leider net.
einerseits dürfen keine Cookies verwendet werden (Kunden bzw. Vermarkter-vorgaben), andererseits ist das kein Formular, welches schrittweise ausgeführt wird.
Wenn du bei der ersten frage im ersten schritt eine bestimmte auswahl triffst, wirst Du auf eine "Abzweigung" gebeten, und von dort wieder auf den ersten schritt zurück....
der erste schritt braucht eben nur beim absenden eine session. die hanseln, die das formular ausfüllen, kriegen ne session, die millionen anderen eben nicht.
naja, dann eben doch der "unsaubere" weg über GET.... *würg*
//edit: Derjenige, der das HTTP-Protokoll erfunden hat, gehört erschlagen!
Zuletzt bearbeitet von lordle am Mi 16.02.2005 15:07, insgesamt 1-mal bearbeitet
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Do 17.02.2005 11:15
Titel
|
|
|
Zitat: | Ich hab den Verdacht, dass es daran liegt, dass die Sessiondeklaration am Anfang der Datei stehen muss bevor irgendwelche header übertragen wurden! |
Ja, bei Start der Session wird versucht, ein Cookie zu setzen und Cookies werden im Header übertragen. Wenn jetzt bereits irgendwas an den Browser geschickt wurde (und wenn es nur ein Leerzeichen ist), dann wurden auch schon Header gesendet.
Zitat: | werden bei der IF-Abfrage wirklich schon header versendet? |
Nein. Das läuft ja nur auf dem Server ab und es wird nichts an den Browser gesendet.
Ein häufiger Fehler ist es aber, ungewollt eine leere Zele an den Client zu schicken. Wenn vor dem beginnenden PHP-Bereich eine oder mehrere Leerzeilen stehen, dann wird das natürlich als HTML aufgefasst. Der Server sendet Header, dann die Leerzeilen. Das Session-Cookie kann dann später nicht mehr gesetzt werden. Aber schätzungsweise solltest du in so einem Fall ein Warning erhalte (Header already sent - oder sowas).
Code: |
<?php
session_start(); // funktioniert nicht mehr
?>
|
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Do 17.02.2005 13:13
Titel
|
|
|
Das warum kann ich auch nicht erkennen.
Vom Code her sollte alles passen.
Verwenden doch POST um die Daten zu transportieren.
Da wird die Session dann überflüssig.
|
|
|
|
|
|
|
|
Ähnliche Themen |
[TYPO3] Session starten, variable an PHP-Skript
User- und Session-ID per Cookie, Session oder in URL durchre
session id?
PHP-SESSION aktualisieren ?
session übergeben???
PHP - Probleme mit der SESSION
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|