Session-Variablen
Phil
- php
Hi!
Ich habe ein kleines Problem mit Sessions.
Ich habe mich n bissel damit beschäftigt, aber verstehe folgendes nicht:
Wenn ich am Anfang session_start() hin knalle und dann irgendwie
if(!isset($_SESSION['variable'])) {
$_SESSION['variable']="Hallo";
}
setze, so ist beim nächsten Aufruf einer Seite $variable (bzw. $_SESSION['variable']) weg.
Was mache ich falsch oder habe ich übersehen? Anscheinend ist es doch nicht sooooo einfach, wie ich dachte...
CU
http://www.yubb.de--
Probier mal was anderes diesen Winter: Coke bei 60 °
Hallo Phil,
setze, so ist beim nächsten Aufruf einer Seite $variable (bzw. $_SESSION['variable']) weg.
Du musst auf _allen_ Seiten, auf denen Du die Session
verwenden willst am Anfang session_start() schreiben.
Dadurch wird die Session nicht nur gestartet, sondern
auch fortgesetzt.
Gruß,
dimde
Hi!
Sorry, wenn ich mich zu kurz ausgedrückt habe. da meine Seite nur aus einer Seite bestehet (index.php, wo dann mit paramentern die Seiten includet werden), wird natürlich immer ein session_start() am Anfang stehen.
CU
http://www.yubb.de
Hallo Phil,
Sorry, wenn ich mich zu kurz ausgedrückt habe. da meine Seite nur aus einer Seite bestehet (index.php, wo dann mit paramentern die Seiten includet werden), wird natürlich immer ein session_start() am Anfang stehen.
Gut :)
Naja, sonst fällt mir noch folgendes ein:
1. Steht session_start ganz am Anfang des Scripts
(sonst funktionieren cookie-basierende Sessions nicht)?
2. Falls Cookies nicht gehen - gibst Du die Session-ID in
der URL mit?
3. Ist der session_save_path in der php.ini richtig gesetzt?
Gruß,
dimde
Hallo,
des Pudels Kern steckt ganz woanders:
Du wünschst, Variablen über eine längere Zeit zu "konservieren". Das habe ich mit meiner Glaskugel aus der Aussage: ...meine Seite nur aus einer Seite besteht... herausorakelt.
Ich vermute daher, dass Du die Seite schließt, und nun erwartest, dass sie beim nächsten Öffnen des gleichen Benutzers noch die selben Variableninhalte kennt.
Soetwas geht, setzt aber voraus, dass Du die Sessionnummer des Users irgendwo zwischenspeicherst und dann die Session mit dieser Nummer wieder herstellst. Außerdem musst Du dem Garbage Collector (Speichermüllbeseitiger) untersagen, dass er die Sessiondatei zwischendurch löscht.
Nun zur Vorgehensweie mit Sessions:
1. Authentifikation des Users über Loginname und Passwort und Select auf eine Datenbank durchführen.
2. Aus dieser DB GENAU EINEN Satz akzeptieren, der passt. Dann gibt es den User mit dem Passwort. Die DB hat sinnvollerweise einen Unique Kombinationsschlüssel über Loginname und Passwort. Wenn 0 Sätze sind, die passen, hat der user kein gültiges Login geschafft, wenn es > 1 sind, dann hat er Dir einen SQL-String über die Input-Felder des Forms geschickt (irgendwie schaffen User das doch immer wieder) und alle Datensätze der DB passen. Die DB MUSS mehr als einen Login-Datensatz enthalten!!!!
3. Aus der DB holst Du Dir eine Session-ID. (die kannst Du vorher durch Auswürfeln und md5() erzeugen. Die Spalte Session-ID ind der DB hat auch einen Unique Index, damit man keinesfalls zweimal die selbe vergeben hat.
4. Diese Session-ID schreibst du nun in das $_COOKIE["PHPSESSID"] hinein. Dann startest Du mit session_start() die Session. Dann sendest Du einen Cookie mit dem Namen PHPSESSID und der Haltbarkeitsdauer 0 und der Domain der Seite. Bei gefaktem Sessionstart (also für die Wiederaufnahme einer alten Session) muss man den Cookie selber senden. Sonst macht das alles die session_start()-Funktion.
5. Nun speicherst Du fleissig die zu sichernden Daten in $_SESSION[...] ab.
6. Bei Beendigung oder Abbruch des Scriptes werden sie automatsich gespeichert.
7. Wenn Du das Browserfenster das nächste mal wieder öffnest, ist ja kein Cookie mehr da, da du nur einen Sessiontemporären gesendet hattest. Das kannst Du durch Abfrage von $_COOKIE["PHPSESSID"] feststellen. Wenn die leer ist, muss der User neu einloggen. Danach beginnst Du wieder bei 1.
Ich hoffe, das hilft Dir weiter.
Liebe Grüße aus http://www.braunschweig.de
Tom