2009-04-17 6 views
6

Es ist möglich, dass ich PHP-Sitzungen nicht ordnungsgemäß lösche, wenn der Benutzer sich abmeldet. Ich habe festgestellt, dass sich die Sitzungs-ID nicht ändert, wenn ich mich abmelde und wieder anmelde, ohne den Browser zu schließen. Wenn ich mich abmelde, das Browserfenster schließe, ein neues öffne und mich anmelde, ist die Sitzungs-ID anders . Muss ich etwas anderes machen oder ist das normales Verhalten? Ich habe den gleichen Prozess seit drei Jahren verwendet, aber etwas passiert vor kurzem, dass mich denken ließ, dass vielleicht ich etwas anderes tun muss.Wie lösche ich eine PHP-Sitzung?

Hier ist, was ich grundsätzlich tun, wenn jemand auf Abmelden klickt.

<?php 

session_start(); 

if(isSet($_SESSION['FacID'])) 
    $facID = $_SESSION['FacID']; //Want to re-instate this after we destroy the session. 

unset($_SESSION); 
session_destroy(); 

if(isSet($_SESSION['FacID'])) 
    $_SESSION['FacID'] = $facID; 

?> 

Antwort

0

Was ist mit dem massiven Speichern und Zerstören? Just session_start und setzen Sie Ihre Variablen. Keine Notwendigkeit zu zerstören, dann setzen Sie sie zurück!

Ihr "Problem" mit dem Browser ist, dass, wenn Sie Ihr Browserfenster schließen, Ihr Browser den Cookie löscht, den PHP sendet, damit er die Sitzungs-ID kennt. Dies ist eine Browser-Option und kann auf der Serverseite nicht geändert werden (es sei denn Sie ausnutzen). Es kann mit einigen Methoden umgangen werden, aber das ist wahrscheinlich nicht die beste Option.

5

Wenn Sie das Bedürfnis verspüren, eine neue ID http://pl.php.net/manual/en/function.session-regenerate-id.php

Und auf Ihre Frage zu zwingen, aus dem Handbuch:

session_destroy() zerstören alle die mit der aktuellen Sitzung zugeordneten Daten . Die globalen globalen Variablen, die mit der -Sitzung verknüpft sind, werden nicht zurückgesetzt, oder der Sitzungscookie wird deaktiviert. Um die Sitzungsvariablen erneut zu verwenden, muss session_start() aufgerufen werden.

Um die Sitzung ganz zu töten, wie der Benutzer abzumelden, müssen die Session-ID auch nicht gesetzt sein. Wenn ein Cookie verwendet wird, um die Sitzungs-ID (Standardverhalten) weiterzugeben, muss der Sitzungscookie gelöscht werden. setcookie() kann dafür verwendet werden.

1

Ihre Sitzung wird zerstört.

PHP generiert nur eine Sitzungs-ID, wenn der Browser keine angibt. Solange die Sitzung veraltet ist, gibt es keine Probleme damit.

+0

Also die Tatsache, dass die gleiche Sitzungs-ID (wenn der Browser nicht geschlossen ist) für mehrere Benutzer wirklich verwendet wird, ist kein Problem? – user39653

+0

Da eine begrenzte Anzahl von Sitzungs-IDs vorhanden ist, wird JEDE ID für mehrere Benutzer verwendet. Die Wiederverwendung ist kein Problem. –