Wie gehe ich mit Sessions richtig um?
Vor kurzer Zeit habe ich mit Begeisterung Postnuke entdeckt. Nun stellt sich mir ein Problem, wo ich einfach nicht mehr weiter weiß.
Ich würde gerne erreichen, daß die index.php von Postnuke nicht direkt aufgerufen werden kann, sondern nur, wenn die index.php von einer bestimmten anderen Datei geladen wird, in meinem Fall loader.html.
Da der Referer kein sicheres Abfragekriterium dafür ist, habe ich es mit der hier vorgestellten Methode versucht:
Analog dazu starte ich in der loader.html (wird durch htaccess - 'AddType application/x-httpd-php .html' - mit php geparst) eine Session, vergebe eine Variable ($_SESSION['ticket'] = "admitone"), die ich in der index.php [nach session_start()] abfrage. Ist sie auf "admitone" gesetzt, wird mit der index.php fortgefahren, wenn nicht: die("Index.php kann nicht direkt aufgerufen werden.") - also Ausstieg. - Soweit der Versuch.
Leider klappt das nur einmal. Bei jedem weiteren Seitenaufruf, etwa durch 'Neu laden' / refresh, erhalte ich "Session initialisation failed" (tatsächlich mit 's' geschrieben, nicht mit 'z'). - Und zwar entsteht der Fehler an der Stelle, an der ich in der index.php session_start() verwende, um anschließend auf die ticket-Variable zuzugreifen. Die Fehlermeldung wird von Postnuke geliefert. Ich vermute, daß der Grund der Meldung damit zu tun hat, daß meine Session mit einer von Postnuke genutzten in Konflikt gerät. Vielleicht, weil dafür die erste Session erst geschlossen werden muß? Das würde das Problem noch schwieriger machen, da ja die Variable 'ticket' auf "admitone" gesetzt bleiben muß, solange Postnuke aktiv ist, damit auch Postnuke auf seine Startseite index.php verweisen kann. Aber das sollte eben nur mit dem mitgegebenen Ticket möglich sein. (Übrigens funktioniert Postnuke wieder prima, wenn ich mein Skript auskommentiere, genauer: wenn ich keine eigene Sessions starte.) Hmm ...
Es scheint mir, als hätte ich da etwas ganz Grundlegendes bei Sessions oder bei Postnuke nicht verstanden.
Eigentlich ist mein Ziel ja nur, in der loader.html eine Variable zu setzen (eine Art Ticket), welche ich in der index.php von Postnuke abfragen kann.
Gibt es da vielleicht noch ganz andere Möglichkeiten?
Ist das Problem überhaupt lösbar?
Wo liegt mein Denkfehler? Weiß irgend jemand Rat?
Vor kurzer Zeit habe ich mit Begeisterung Postnuke entdeckt. Nun stellt sich mir ein Problem, wo ich einfach nicht mehr weiter weiß.
Ich würde gerne erreichen, daß die index.php von Postnuke nicht direkt aufgerufen werden kann, sondern nur, wenn die index.php von einer bestimmten anderen Datei geladen wird, in meinem Fall loader.html.
Da der Referer kein sicheres Abfragekriterium dafür ist, habe ich es mit der hier vorgestellten Methode versucht:
Analog dazu starte ich in der loader.html (wird durch htaccess - 'AddType application/x-httpd-php .html' - mit php geparst) eine Session, vergebe eine Variable ($_SESSION['ticket'] = "admitone"), die ich in der index.php [nach session_start()] abfrage. Ist sie auf "admitone" gesetzt, wird mit der index.php fortgefahren, wenn nicht: die("Index.php kann nicht direkt aufgerufen werden.") - also Ausstieg. - Soweit der Versuch.
Leider klappt das nur einmal. Bei jedem weiteren Seitenaufruf, etwa durch 'Neu laden' / refresh, erhalte ich "Session initialisation failed" (tatsächlich mit 's' geschrieben, nicht mit 'z'). - Und zwar entsteht der Fehler an der Stelle, an der ich in der index.php session_start() verwende, um anschließend auf die ticket-Variable zuzugreifen. Die Fehlermeldung wird von Postnuke geliefert. Ich vermute, daß der Grund der Meldung damit zu tun hat, daß meine Session mit einer von Postnuke genutzten in Konflikt gerät. Vielleicht, weil dafür die erste Session erst geschlossen werden muß? Das würde das Problem noch schwieriger machen, da ja die Variable 'ticket' auf "admitone" gesetzt bleiben muß, solange Postnuke aktiv ist, damit auch Postnuke auf seine Startseite index.php verweisen kann. Aber das sollte eben nur mit dem mitgegebenen Ticket möglich sein. (Übrigens funktioniert Postnuke wieder prima, wenn ich mein Skript auskommentiere, genauer: wenn ich keine eigene Sessions starte.) Hmm ...
Es scheint mir, als hätte ich da etwas ganz Grundlegendes bei Sessions oder bei Postnuke nicht verstanden.

Eigentlich ist mein Ziel ja nur, in der loader.html eine Variable zu setzen (eine Art Ticket), welche ich in der index.php von Postnuke abfragen kann.
Gibt es da vielleicht noch ganz andere Möglichkeiten?
Ist das Problem überhaupt lösbar?
Wo liegt mein Denkfehler? Weiß irgend jemand Rat?

Kommentar