2010-09-23 5 views
2

J'ai une application ACL + auth. Tout fonctionne bien, mais j'ai découvert que l'utilisateur est déconnecté après une période de temps aléatoire. Après avoir fait quelques recherches, j'ai découvert que le jeu de cookies une fois ne change pas sa date d'expiration lors de l'actualisation de la page. Donc, il va comme ceci:Session d'authentification CakePHP et cookie ne se mettant pas à jour

Je mis en place le temps d'expiration manuellement à 1 minute (Security.level faible (avec quelques changements dans le gâteau/libs) et délai d'attente 60)

19:00:00 - utilisateur charge la la page - cookie est mis en place

19:00:05 - journaux utilisateur dans (cookie ne change pas la date d'expiration)

19:00:30 - rafraîchir la page (cookie ne change pas la date d'expiration)

19:00:55 - actualisation de la page (le cookie ne modifie pas la date d'expiration)

19:01:05 - rafraîchir la page - utilisateur est déconnecté ... (biscuit expiré après 1 minute)

Le problème est que l'utilisateur se connecté après 60 secondes un cookie au lieu de 60 secondes d'inactivité. Est-ce que CakePHP gère automatiquement les fichiers cookie? Ou dois-je m'en occuper moi-même? Tout ce que j'ai fait est de configurer un nom de cookie dans config/core.php et setup auth. Je n'ai pas de fonction de gestion des cookies, mais le cookie est créé lui-même - correctement, n'est pas mis à jour

+4

"avec quelques changements dans le gâteau/libs" ?! Je dirais que tous les paris sont partis. Qu'avez-vous exactement changé et pourquoi? Il ne devrait pas être nécessaire de toucher le répertoire '/ cake' à moins que vous corrigiez un bug dans le noyau. – deceze

+1

Votre serveur dispose-t-il du correctif suhosin? – Dunhamzzz

Répondre

1

J'ai eu le même problème et l'ai contré avec le code suivant qui est appelé à chaque appel de chargement de page et ajax .

if(isset($_COOKIE[Configure::read("Session.cookie")])){ 
      $session_delay = Configure::read("Session.timeout") * (Configure::read("Security.level") == "low" ? 1800 : 100); 
      setcookie(Configure::read("Session.cookie"), $_COOKIE[Configure::read("Session.cookie")], mktime() + $session_delay, "/"); 
    } 
+0

Je considère cette solution. Mais je considère également que la date d'expiration du cookie sera de 10 ans dans le futur. – SunSparc

Questions connexes