2010-01-11 12 views
11

Ich habe ein Problem, wo ich die PHP-Sitzung zwischen 2 Seiten verliere.PHP-Session-ID wechselt zwischen den Seiten

Der session_start() ist in einer Datei mit dem Namen session-inc.php in jeder Seite enthalten, die das Setzen einer Sitzung erfordert. Dies funktioniert für alle Seiten auf der Website mit Ausnahme einer bestimmten Seite, member-profile.php. Wenn diese Seite besucht wird, wird eine neue Sitzung mit einer anderen ID (derselbe Sitzungsname) festgelegt und stattdessen verwendet.

Noch ein paar Details:

  • Session Name wird manuell
  • Alle Seiten sind auf demselben Server unter der gleichen Domain-Namen
  • Wenn ich eine zusätzliche session_start put() über die umfassen ('session-inc.php') in der Datei member-profile.php, die Sitzung wird korrekt übertragen
  • Ich habe versucht, die Session_cookie_domain und session.session_name in der .htaccess, funktionierte dies für diese Domäne, aber es stoppte die Sitzung wird an die Zahlungsdomäne übergeben
  • Wir laufen Apache 2.2.6 mit PHP 5.2.5

Putting der session_start() über dem include ('sitzungs inc.php') in dem Mitglied profile.php Datei ist die schnelle und schmutzige Lösung für dieses Problem, aber ich frage mich, ob jemand weiß, warum das passieren würde.

Prost

Will

+0

Könnten Sie den Inhalt Ihrer Datei session-inc.php posten? Ist include ('session-inc.php'); das erste, was du in der member-profile.php machst? – Dominik

Antwort

7

Nach PHP-Dokumentation, session_start muss aufgerufen werden, bevor irgendeine Ausgabe an den browser-- zurückgesendet wird könnte diese Seite ein Schelm CR/LF, Unicode-Byte-Reihenfolge-Marke haben oder ähnlich, dass die Ausgabe vor Ihnen include('session-inc.php') verursacht?

+0

Hallo Ken Ich habe die Skripte überprüft und es scheint keine Ausgabe vor dem Aufruf von session_start(). – willl69

+0

+1 für den Unicode-Byte-Order-Markenhinweis. Du hast meinen Tag gerettet! – AquilaRapax

0

fanden die Ausgabe

Es gibt eine Bytereihenfolgemarkierung am Anfang der Hauptdatei der zweiten Domäne umfasst war. Wie von Ken angegeben, kann keine Ausgabe vor dem Start einer Sitzung durchgeführt werden, es hat die Sitzung nicht korrekt eingestellt.

2

Bei der Migration einer älteren Site von PHP4 nach PHP5 ist mir eine Konfigurationseinstellung php.ini aufgefallen, die PHP veranlasst, die Sitzung bei jeder Anfrage automatisch zu starten. Es ist eine Alternative zu session_start() auf jeder Seite platzieren ...

Es gibt mehrere Möglichkeiten, um diese Einstellung zu aktivieren:

Setzen Sie die folgende Zeile in der php.ini:

session.auto_start = on 

oder setzen Sie diese in Ihre apache virtuellen Ort Config oder .htaccess-Datei:

<IfModule mod_php5.c> 
    php_flag session.auto_start on 
</IfModule> 

und es sollte auf allen Seiten $ _SESSION Änderungen zur Verfügung stellen

0

Gefunden wurde das Problem, dass eine Byte Order Mark (BOM) am Anfang der Datei ausgegeben wurde. Habe es losgeworden und es hat das Session-Problem aussortiert.

2

Ich habe gerade dieses Problem festgestellt. Interessanterweise half mir das Browsen über http://127.0.0.1 anstelle von http://localhost.

0

LÖSUNG: session.auto_start = auf in file: php.ini

Es löste das Problem der Wiedererzeugungs Session-ID auf Seite neu laden (Seite aktualisieren/ändern Seiten).

Das Problem erschien nach dem Update von CPanel (und enthalten Multi-PHP), auch die PHP-Version blieb gleich.

Die Datei PHP.ini hatte diese Variable überhaupt nicht. Ging in Cpanel -> MultiPHP INI Editor -> Editor-Modus (nicht Basic, in Basic haben Sie nicht diese Einstellung) und die Zeile hinzugefügt. Drücken Sie Speichern.

TIPPS/WANN DIESE LÖSUNG ZU VERWENDEN IST: Um festzustellen, ob das das Problem ist, legen Sie eine Zeile ganz am Anfang und am Ende Ihrer index.php-Datei, um die Session-ID zu überprüfen. Verwenden Sie die Funktion: session_id(); Navigieren Sie durch Seiten/laden Sie die Seite neu. Wenn sich der session_id-Wert ändert, ist das Problem nicht in Ihrem Code und diese Lösung sollte Ihr Problem lösen (die Sitzung ist außerhalb Ihres Codes verloren).

Ich habe auch versucht, die Verfügbarkeit von Speichern Sitzung auf dem Webserver (session.save_path) zu überprüfen, aber selbst wenn es ein Lead war, war es nicht der Fall. Ich kann mir vorstellen, dass dies ein "Feature" von Cpanel mit MULTIPHP UPDATE ist, das wird sehr oft passieren.

Verwandte Themen