Moin!
ich ahbe eine Seite in der dynamisch iframes erzeugt werden.
Das ist ja absolut undramatisch.
Es soll auch moeglich sein, dass der User die Seite in mehreren Browserfenstern/-tabs oeffnet.
Ebenso.
Ich gehe dabei wie folgt vor:
Du gehst falsch vor.
[index.php]
[...]
// User noch nicht eingelogged
if(!$_SESSION['logged_in'])
An dieser Stelle muß schon session_start() aufgerufen worden sein.
Deshalb kannst du später...
{
// neuen Login erzeugen
$login_window = new LoginWindow();
$login_window->show();// Login erfolgreich => Session erstellen, und login-Flag sezten
if($login_window->success())
{
...hier den Session-Namen und die Session-ID nicht mehr setzen und die Session neu starten:
session_name('sess_name_'.uniqid());
session_id(md5(uniqid()));
session_start();
Außerdem besitzt PHP bereits einen sehr guten Algorithmus zur Erzeugung einer nicht ratbaren Session-ID, so dass dein Versuch, ihn nachzubilden, keinerlei Vorteil bringt. Ebenso scheitert der Versuch, den Session-Namen mit der uniqid() anzureichern, denn damit erzeugst du nicht vorhersagbare Session-Namen, d.h. PHP kann die Session-ID nicht mehr aus dem (konstanten) Session-Name-Parameter (in URL oder Cookie) herausfiltern, weil sich dieser Parameter ja auch ständig ändert. Im Endeffekt müßtest du nahezu sämtliche Arbeiten, die PHP allein perfekt erledigt, mit eigenem PHP-Code nachbilden, ohne auch nur den geringsten Sicherheitsgewinn (ich vermute das mal als Motivation dahinter) zu erreichen.
$_SESSION['logged_in'] = TRUE;
}
}
Die Session-ID sowie den Namen der Session gebe ich an jedes neue Fenster weiter, und fuehre ...
Wie?
session_name(GET['session_name']);
session_id(GET['session_id']);
session_start();
Meinst du nicht auch, dass es reichlich überkandidelt ist, den dynamischen Session-Namen an einen statischen Session-Namen-Parameter zu binden, und die dynamische Session-ID an einen statischen Session-ID-Parameter, nur um dann intern den dynamischen Session-Namen mehr oder weniger nutzlos wegzuwerfen, und nur die Session-ID vom statischen Session-ID-Parameter zu nutzen - ganz genau so, wie PHP es auch selbst tut?
Soweit duerfte ja alles passen, oder?
Du hast dir soviele Fehlerquellen eingebaut, dass ich ohne Bedenken "Nein!" antworten kann. Denn andernfalls hättest du ja keine Probleme, oder? :)
Allerdings hat dieser Ansatz ein Problem.
Mit jedem Refresh (F5 o.ae.) wird nicht nur NICHT die aktuelle Session WEITERGEFUEHRT, es wird eine NEU Session ERSTELLT, und die VORHERIGE nicht GELOESCHT, da ich in diesem Fall ja nicht an den Namen oder die ID der aktuellen Session komme.
Das ist eben dein Problem, dass du dir durch den dynamischen Session-Namen einhandelst.
Daher meine Fragen:
Ist mein Ansatz okay?
Absolut nicht.
Wie koennte man das besser loesen?
Nutzen den Session-Mechanismus von PHP "nackt", ohne eigene Nachbesserungen. Der funktioniert sehr sehr gut.
Kann bei Refreshs oder bei Wiedereingabe der URL trotzdem die aktuelle Session fortsetzen, und wenn ja, wie?
Wenn man PHPs Session-Mechanismus normal nutzt, klappt in der Regel alles.
- Sven Rautenberg
"Love your nation - respect the others."