2016-07-26 3 views
0

Ich benutze Facebook PHP SDK für die Validierung von Benutzern Kommentare zu hinterlassen und es funktioniert ganz gut. Einmal validiert, speichere ich die Benutzerinformationen in einer Sitzungsvariablen, aber rufen Sie zuerst session_regenerate_id() und dann laden Sie die Seite neu. Wenn die Seite neu geladen wird, sind die alten Sitzungsdaten weiterhin verfügbar, einschließlich der Facebook SDK-Statusvariable. Die von mir hinzugefügte Sitzungsvariable ist jedoch nicht verfügbar. Im Folgenden ist ein Ausschnitt aus dem Code:Probleme mit session_regenerate_id()

session_regenerate_id(); 
$_SESSION[...] = ...; 

header('Location: ...'); 
die(); 

Wenn ich die session_regenerate_id() nehmen dann alles perfekt funktioniert. Irgendwelche Ideen, was ich falsch mache?

EDIT

Wenn ich session_id() jede Seite zu laden einzuloggen, sehe ich, dass session_regenerate_id() eine neue ID generiert und die Sitzung enthält alles, was ich erwarte. Wenn die Seite neu geladen wird, ist die Sitzungs-ID jedoch die vorherige Sitzungs-ID und nicht die neue, daher kann ich nicht auf die neuen Sitzungsvariablen zugreifen. Warum würde das passieren?

+0

'"; print_r ($ _ SESSION); ?> ' –

+0

Warum machst du die' session_regenerate_id(); 'Wenn Sie eine Sitzung haben, verwenden Sie es – RiggsFolly

+0

@Anant Ich habe das getan und alles sieht gut aus. Beim erneuten Testen habe ich jedoch festgestellt, dass die Sitzungs-ID, die nach dem 'session_regenerate_id()' gemeldet wurde, nicht identisch ist, wenn ich die Seite neu lade, was immer noch die alte Sitzung ist. Also, ich denke, die Frage wird, warum verändert sich die Session ID nicht wirklich? – steveo225

Antwort

0

Nach einer Menge Protokollierung und Scannen der Header gesendet und empfangen, stellte ich fest, dass, wenn die erste Sitzung erstellt wurde, die Domäne für den Cookie verwendet wurde: .domain.com (ohne das www). session_regenerate_id() setzte die Domäne für den Cookie jedoch auf www.domain.com. Wenn der Browser eine Entscheidung getroffen hat, welche gesendet werden soll, sendet er immer die ursprüngliche, so dass die verwendete Sitzung immer die alte war. Sobald ich diesen Cookie manuell löschte, funktionierte alles gut.

Um diese Art der Sache sicher, wieder nicht geschieht, habe ich folgendes vor meiner Sitzung starten:

session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], true, true); 

Was seltsam ist, die .htaccess-Datei erzwingt www.domain.com für Konsistenz, so Ich bin mir nicht sicher, warum die Domain des ursprünglichen Cookies so eingerichtet wurde, wie sie war.