2012-04-23 8 views
7

Vor kurzem habe ich drei Kuchen Apps gemacht und alle drei teilen dieses Problem. Die Konfiguration ist meistens Lager und ich benutze dies als die Sitzungsoptionen.CakePHP hält mich abmeldet

Configure::write('Session', array(
    'defaults' => 'php', 
    'cookie' => 'test' 
)); 

Nach vielen jedem googeln schlägt nur, dass das Sicherheitsniveau zu hoch ist, aber ich habe nie diesen Wert geändert, es ist:

Configure::write('Security.level', 'medium'); 

bearbeiten: Ich habe auch mit niedriger Sicherheit versucht und keine Veränderung.

Ich benutze nur grundlegende Auth, um zu überprüfen, ob der Benutzer angemeldet ist oder nicht.

Nach der Anmeldung wird der Cookie drei Stunden später ablaufen und das Ablaufdatum wird nicht aktualisiert, bis ich mich wieder anmelde, ist das normal?

Ich kann nicht scheinen, das Problem überhaupt zu replizieren, manchmal werde ich mich anmelden und der nächste Klick wird mich wieder abmelden und andere Male wird es eine Weile dauern.

Ich verwende Chrome auf Windows 7 und es gibt keine AJAX auf der Website.

Irgendwelche Ideen? Vielen Dank.

+0

Auch sie mit mee passiert ... Versuchen 'Configure :: write ('Security.level', 'low') zu ändern;' !! – Rikesh

+0

Keine Notwendigkeit, aus dem Griff zu fliegen und starten Browser jetzt zu verurteilen;) – jeremyharris

+0

@Jleagle wo setzen Sie Cookie-Zeit für den angemeldeten Benutzer und wie? poste den Code, bitte .. – thecodeparadox

Antwort

5

Verwenden Sie Ajax. Tritt das Problem nur in IE auf?

IE verwendet eine andere Browser-Agent-Zeichenfolge für Ajax-Aufrufe an den Browser selbst. Für zusätzliche Sicherheit überprüft Cake den Browser-Agenten und denkt im Falle von IE, dass ein anderer Browser versucht, die Sitzung zu entführen, da der Agent anders ist.

können Sie diese Prüfung mit deaktivieren:

Configure::write('Session.checkAgent', false); 
+0

Ich benutze überhaupt kein AJAX. Und der einzige Browser, den ich ausprobiert habe, ist Chrome. – 472084

+0

Ausgezeichnet !!! Mein Ajax-Problem mit jQuery – Ondrej

0

Sie sind nicht die einzigen Probleme mit CakePHP-Sitzungen auf Chrome-Browser hat.

Pixelastic Kerl Coder schlägt die following fix, Zitat:

Gerade Datei session_custom.php in app/config/, fallen die folgenden Zeilen in ihm benannt erstellen:

// Killing this config that was causing so much trouble with Chrome 
ini_set('session.referer_check', ''); 

// No session id in url 
ini_set('session.use_trans_sid', 0); 

// Using custom cookie name instead of PHPSESSID 
ini_set('session.name', Configure::read('Session.cookie')); 

// Cookie like time, depending on security level 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 

// Cookie path 
ini_set('session.cookie_path', $this->path); 

gesetzt Dann Configure::write('Session.save', 'session_custom'); in Ihrer core.php Datei.

+0

behoben Das sieht hilfreich aus, aber ich denke es ist etwa 1.3, nicht 2.1. Diese Zeile 'ini_set ('session.name', Configure :: read ('Session.cookie'));' ich denke, ist bereits zu 2.1 hinzugefügt - Ich werde weiter untersuchen – 472084

+0

Ich habe gerade versucht mit dem 'ini_set ('session.referer_check ',' '); Zeile und dann wird Ihr vollständiger Code und nicht gestoppt, dass es passiert. Obwohl ich glaube, dass es ein Problem nur für Chrome ist. – 472084

0

ist das Problem mit Sitzungen:

Ersten ur überprüfen 'phpinfo();'

Überprüfen Sie, ob die Sitzungen dateibasiert sind.

Wenn ja, gehen Sie durch den Prozess.

eine neue Skriptdatei (php) erstellen, die nur diesen Code enthält: <?php var_dump(session_save_path());?>

Lauf es, wenn Sie null oder eine leere Zeichenfolge dann für diesen Prozess gehen erhalten:

  1. zuerst ein Verzeichnis erstellen in Ihrem root ordner name es 'xyz' oder was auch immer du willst.
  2. schreibbar machen, d.h. chmod 777.
  3. Wechseln Sie in das Skript, in dem Sie Sitzungen starten, und ändern Sie vor dem Starten der Sitzungen den Pfad session_save_path in das neu erstellte Verzeichnis. d. h .: session_save_path('pathToxyz');

und dann fertig.

Wenn die Sitzungen als Speicher definiert sind: keine Konfiguration erforderlich. Sie benutzen nur Systemspeicher. in diesem Fall hättest du nie zu diesem Problem gekommen.

+0

welcher teil von phpinfo erzähle mir was ich wissen muss? - 'var_dump (session_save_path());' gibt mir 'string (20)"/var/lib/php/session "' – 472084

+0

ok Ihre Sitzungen sind richtig eingestellt. Das ist also nicht Ihre Lösung Versuchen Sie, die Daten für die Anmeldung bei jedem Schritt zu "var_dump" zu machen, damit Sie wissen, was im Programm vor sich geht. vielleicht hilft dir das weiter :) –

+0

Danke für deine Hilfe trotzdem! – 472084

1

Nach dem gleichen Problem habe ich festgestellt, dass dies durch den Wert Session.cookieTimeout verursacht wurde. Obwohl die php-Sitzung noch gültig war, wird das Ablaufdatum des Sitzungscookies nicht aktualisiert.

Dies ist nun meine Session Config

Configure::write('Session', array(
     'defaults' => 'php', 
     'timeout' => 30, // The session will timeout after 30 minutes of inactivity 
     'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts 
     'checkAgent' => false, 
     'autoRegenerate' => true, // causes the session expiration time to reset on each page load 
    )); 
Verwandte Themen