| 

.NET C# Java Javascript Exception

3
Ich quäle mich schon eine Stunde damit:

Wie handelt man in PHP benannte Sessions? In meinem Login-Script vergebe ich einen Session-Namen und starte die Session. Als Name verwende ich die md5 aus der E-Mail-Adresse des Users. Es werden noch ein paar andere Angaben in die Session-Variable geschrieben.
session_name(md5($result->email));
session_start();
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];


Wenn ich dann meine index.php neu aufrufe (durch Reload oder per Link), müsste doch die Session dort verfügbar sein. Dort frage ich folgendes ab:
$sessname = session_name();
if ($sessname)
{
session_name($sessname);
// Eine Session ist vorhanden
session_start();
}

Jetzt müsste doch in der Variable $_SESSION alles vorhanden sein, was ich beim Login gespeichert habe. Aber ich bekomme nur ein leeres Array.

Wie bekomme ich das gescheit hin, dass ich Sessions Namen vergebe und bei nachfolgenden Aufrufen diesen Namen abfragen kann und auf die benannte Session zurückgreifen kann?
News:
21.04.2011
Gast
31 1
Hm.. irgendwie verstehe ich das nicht. Bei php.net steht doch, session_name() muss vor session_start() aufgerufen werden...
johny7 26.04.2011
2 Antworten
0
Es gibt einige Denkfehler in deinen Script.
Bei dir wird schon die Session erzeugt und $_SESSION['agent'] mit Daten befüllt.
Leider überschreibst du bei der Anfrage nach der Session deine Session mit einer neuen Session session_name($sessname) deshalb ist sie leer.

Du solltest am besten deine Daten in einen Array speichern, den kannst du nach Existenz abfragen.
session_start() solltest du immer am Anfang benutzen damit PHP die Session startet.
Danach prüfst du ob dein Array ['user'] in der Session vorhanden ist, wenn nicht dann den Session-Namen setzen und die Session neu generieren, jetzt kannst du dein Array mit Daten befüllen.
z.B. so
session_start();
if(!isset($_SESSION['user'])) {
session_name(md5($result->email));
session_regenerate_id();
$_SESSION['user'] = array();
$_SESSION['user']['agent'] = $_SERVER['HTTP_USER_AGENT'];
}
echo print_r($_SESSION['user'], true).' Sessionname: '.session_name();


Ich hoffe es ist verständlich.
24.04.2011
Hm... irgendwie verstehe ich nicht ganz.

Auf php.net wird erklärt, session_name() müsse vor session_start() aufgerufen werden.
johny7 26.04.2011
0
Noch einmal zum Ablauf: In der login.php lege ich eine benannte Session an. Als Session-Namen verwende ich die md5 der E-Mail-Adresse.

In der index.php versuche ich an den Namen der Session zu kommen. Das mache ich mit einer Zuweisung von session_name() an $sessname. Normalerweise müsste doch dort die md5 der E-Mail-Adresse stehen. Aber wenn ich $sessname danach sofort in eine Konstante schreibe und später ausgebe, steht PHPSESSID drin.
Ich wollte dann anhand von $sessname überprüfen, ob eine Session gesetzt wird und nochmal den Session-Namen mit $sessname setzen (laut php.net muss session_name() ja jedes mal neu gesetzt werden, damit der Name nicht überschrieben wird). Und das klappt jetzt nicht.

Außerdem ist es doch nicht performant, wenn bei jedem Aufruf mit session_start() eine Session angelegt wird. Ich brauche die Session ja nur, wenn jemand eingeloggt ist. Im übrigen habe ich die E-Mail-Adresse desjenigen, der eingeloggt ist, nur beim Login-Vorgang. D.h. ich kann sie in der index.php nicht für session_name() verwenden. Es macht doch aber Sinn, für jeden eingeloggten Benutzer eine eigene Session zu öffnen. Wie kann ich das sinnvoll machen?
26.04.2011
johny7 509 7

Stelle deine Php-Frage jetzt!