2009-07-13 9 views
0

Ich habe eine Website, wo die Login-Informationen optional in einem Cookie gespeichert werden (merken Sie sich das Kontrollkästchen bei der Anmeldung) und wenn sich der Benutzer abmeldet, wird der Wert des Authentifizierungscookies nicht so geändert, dass der Cookie abläuft.Warum ändert sich mein Cookie-Wert in PHP 5 nicht?

Das System funktioniert sowohl auf dem Dev- als auch auf dem Staging-Server ordnungsgemäß, funktioniert jedoch aus irgendeinem Grund nicht auf unserem Produktionsserver. Wir betreiben PHP 5 und Apache auf allen Servern.

Danke.

Funktion Cookie (Kleine Änderungen für die Sicherheit) zu setzen:

function setCookieInfo($data,$expiry=0) 
{ 
    if($data === false) 
    { 
     //remove cookie! 
     $cookie = false; 
     $expiry = 100; //should be in the past enough! 
    } 
    else 
    { 
     $serial = base64_encode(serialize($data)); 
     $hash = md5($XXX); 
     $cookie = $hash."---".$serial; 
    } 

    if($_SERVER['SERVER_NAME']=='localhost') 
    { 
     $domain = null; 
    } 
    else 
    { 
     $domain = '.'.$_SERVER['SERVER_NAME']; 
    } 

    return setcookie('Auth', $cookie, $expiry, $this->controller->base, $domain); 
} 
+0

Können Sie weitere Details angeben, z. B .: Sind Server mit SSL? Ist der Pfad des Cookies richtig eingestellt? Können wir den Code sehen, der die eigentliche Abmeldung durchführt? –

+0

hat den obigen Code hinzugefügt. keiner verwendet SSL. – JustJon

Antwort

1

einiger tatsächlicher Code der Veröffentlichung könnte helfen, aber ich werde eine Vermutung Gefahr, dass es etwas mit der Cookie-Domain wird verwendet, um zu tun.

0

Angenommen, Sie verwenden die PHP-setcookie() -Funktion, stellen Sie sicher, dass die Domäne und der Pfad für den Cookie richtig festgelegt sind. Überprüfen Sie PHP's documentation für die Funktion für weitere Informationen.

Ich könnte Ihnen sicher sagen, wenn ich ein wenig mehr Informationen hätte. Können Sie weitere Informationen bereitstellen, ohne das Projekt zu sehr zu gefährden? Wie wäre es mit den URLs der Dev-, Staging- und Produktionsserver oder zumindest Beispiele dafür, wie sie aussehen könnten?

bearbeiten

auf der Info Basierend Sie in Ihrem Kommentar zur Verfügung gestellt, würde ich empfehlen, dass Sie versuchen, mit HTTP_HOST statt SERVER_NAME. SERVER_NAME gibt Ihnen möglicherweise einen seltsamen Wert, abhängig von der Konfiguration Ihres virtuellen Servers. Ihr Weg vielleicht nicht ganz richtig - entweder versuchen, ein ‚/‘ und es sollte unabhängig von dem Unterverzeichnis zur Verfügung der Benutzer befinden

Auch

$this->controller->base 

macht ich denke, dass Sie CodeIgniter werden könnten, verwenden. oder Kohana. Wenn ja, könnten Sie in Betracht ziehen, ihre Cookie-Helfer zu verwenden.

+0

Dev wird als localhost ausgeführt (MAMP läuft auf lokalem Rechner), Staging erfolgt über IP-Adresse (keine DNS zugeordnet), Produktion erfolgt über den Site-Namen. – JustJon

0

Erfassen Sie eine Traffic-Erfassung (z. B. www.fiddler2.com) des SetCookie-Aufrufs, mit der der Cookie gelöscht werden soll, und stellen Sie sicher, dass die Domäne gültig ist und der Ablaufzeitpunkt wie erwartet ist.

+0

Domain-Wert ist wie erwartet, wie Ablauf ist. – JustJon

Verwandte Themen