2010-10-14 31 views
0

J'ai donc essayé beaucoup de choses, mais je me retrouve toujours avec des cookies dont la durée est définie sur "Session" quand on les regarde avec les outils de développement dans Google Chrome . Voici mes paramètres actuels:Pourquoi ne puis-je pas configurer ma durée de cookie avec cakePHP

core.php:

Configure::write('Session.cookie', 'session'); 
Configure::write('Session.timeout', '3600'); 
Configure::write('Session.start', true); 
Configure::write('Security.level', 'high'); 

users_controller.php

$this->Cookie->write('xHi1PeWmAw', $user_record['User']['id']); 

Je l'ai essayé de changer Security.level, le Session.timeout, en utilisant $ this-> Cookie-> temps = 3600; et en combinant tout cela, mais je ne peux pas sembler changer cette durée. J'ai aussi essayé avec des durées courtes et longues, étant donné que je préfèrerais que ce cookie dure le plus longtemps possible. Pouvez-vous s'il vous plaît me dire ce que je fais mal?

+0

Êtes-vous de vérifier pour assurer le cookie existe avant en écrire un nouveau? Sinon, vous risquez de créer un nouveau cookie à chaque fois, écrasant ainsi l'heure d'expiration à chaque fois. –

+0

oui, j'ai essayé avec et sans supprimer manuellement les cookies. En fait, j'ai réussi à obtenir une durée réelle, et pas seulement un cookie "Session" en mettant le Security.level à un niveau moyen, mais je ne comprends toujours pas la logique derrière tout ça. –

Répondre

0

J'ai eu le même problème (CakePHP 1.3.7) et maintenant il ne fonctionne que si je mets la durée dans le write() méthode:

$this->Cookie->write ("cookie_name", "Some value", true, "+1 months"); 
0

Bien que je ne puisse pas garantir que cela corrigera votre problème, je peux vous expliquer comment configurer correctement les sessions.

Vous devez d'abord définir votre variable Security.timeout. Cela représente une valeur de délai d'expiration en secondes, mais cela ne correspond pas à l'heure d'expiration de votre session. Ce nombre est multiplié par une valeur constante en fonction du réglage de votre variable Security.level.

'high' = x 10, 'medium' = x 100, 'bas' = x 300,

Voici ce que vous donne votre temps d'expiration. Par exemple, si vous avez un Session.timeout de 30, et un Security.level de faible, vos sessions expireront dans 30 * 300 secondes, ou 150 minutes.

+0

Eh bien, j'ai réussi à aller aussi loin, mais ce que je ne comprends pas, c'est "dans ce cas, mon cookie n'aura plus une durée réelle mais deviendra un cookie" de session "" ... Merci d'avoir essayé. –

0

Si vous utilisez des cookies en tant que session, son heure est définie sur 0. Cela signifie que le délai d'expiration est défini à la fermeture du navigateur. Vous pouvez essayer de changer ce nombre dans le contrôleur comme indiqué dans le code ci-dessous. Voyez si cela fait une différence. Je n'ai pas testé cela, mais ça vaut le coup.

var $components = array('Cookie'); 
function beforeFilter() { 
    $this->Cookie->name = 'baker_id'; 
    $this->Cookie->time = 3600; // or '1 hour' //IF 0 THIS IS A SESSION COOKIE 
    $this->Cookie->domain = 'example.com'; 
    $this->Cookie->secure = true; //i.e. only sent if using secure HTTPS 
    $this->Cookie->key = 'qSI232qs*&sXOw!'; 
}