2010-10-21 8 views
14

Ich versuche, eine Abmeldungsfunktion für eine Web-App zu beheben. Wenn Sie angemeldet sind, enthält die App mehrere Cookies für die Domain. Hier ist die aktuelle Abmeldeprozedur:PHP - Warum kann ich diesen Session-ID-Cookie nicht loswerden?

  • Sie auf einen Link klicken, die Sie auf eine Logout-Seite sendet
  • Die Logout-Seite läuft eine Funktion, die session_destroy() nennt und auch durchläuft alle Cookies für die Domäne und setzt sie auf in der Vergangenheit ablaufen (siehe Code unten)
  • Die Abmeldeseite wird dann auf eine Anmeldeseite umgeleitet, bei der es sich um reines HTML handelt.

Am Ende dieses Prozesses werden alle anderen Cookies sind nicht gesetzt, aber die PHPSESSID Cookie ist noch da, hat den gleichen Wert, und ist immer noch am Ende der Sitzung auslauf.

Was fehlt mir hier?

Hier ist die Abmeldefunktion ich oben erwähnt:

function log_out_current_user() { 

     // Destroy the session 
     if (isset($_SESSION)) { 
      session_destroy(); 
     } 

     // Expire all of the user's cookies for this domain: 
     // give them a blank value and set them to expire 
     // in the past 
     if (isset($_SERVER['HTTP_COOKIE'])) { 
      $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
      foreach($cookies as $cookie) { 
       $parts = explode('=', $cookie); 
       $name = trim($parts[0]); 
       setcookie($name, '', time()-1000); 
       setcookie($name, '', time()-1000, '/'); 
      } 
      // Explicitly unset this cookie - shouldn't be redundant, 
      // but it doesn't hurt to try 
      setcookie('PHPSESSID', '', time()-1000); 
     } 

    } 

Antwort

29

Sie sind nicht mit den gleichen Parametern zu entfernen, wie es erstellt wurde. Verwenden Sie session_get_cookie_params, um diese zu erhalten. Um tragbar zu sein, sollten Sie den Namen des Cookies über session_name erhalten. Hier ist ein kleines Skript, das zu tun:

$params = session_get_cookie_params(); 
setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly'])); 
Verwandte Themen