2010-10-14 3 views
0

Итак, я пробовал много вещей, но все равно всегда получаю файлы cookie, для которых продолжительность сеанса имеет значение «Сессия» при просмотре с помощью инструментов разработчика в Google Chrome , Вот мои текущие настройки:Почему я не могу настроить продолжительность моего cookie с помощью 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']); 

Я попытался изменить Security.level, в Session.timeout, используя $ this-> Cookie-> time = 3600; и все это сочетает, но я не могу изменить эту продолжительность. Также я пробовал с короткой и длинной продолжительностью, учитывая, что в идеале для этого файла cookie продлится как можно дольше. Не могли бы вы рассказать мне, что я делаю неправильно?

+0

Вы проверки, чтобы гарантировать, что печенье существует до написать новый? В противном случае вы можете просто создавать новый файл cookie каждый раз, тем самым каждый раз переписывая время истечения. –

+0

Да, я пытался с и без ручного удаления файлов cookie. Фактически, мне удалось получить реальную продолжительность, а не только «cookie» сеанса, поставив уровень Security.level на среднем уровне, но я все еще не понимаю логику всего этого. –

ответ

0

У меня была такая же проблема (CakePHP 1.3.7), и теперь он работает только если я поставлю длительность в записи() метод:

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

Хотя я не могу гарантировать, что это исправит вашу проблему, я могу объяснить, как правильно настроить сеансы.

Сначала вы установили переменную Security.timeout. Это означает значение тайм-аута в секундах, но это не соответствует времени окончания сеанса. Это число умножается на постоянное значение в зависимости от настройки вашей переменной Security.level.

'высокий' = х 10, 'средний' = х 100, 'низкий' = х 300,

Это то, что дает вам ваше время истечения срока действия. Например, если у вас есть Session.timeout из 30 и Security.level с низким, ваши сеансы истекают через 30 * 300 секунд или 150 минут.

+0

хорошо, что я получил это далеко, но то, что я не получаю, - «в этом случае у моего cookie больше не будет реальной продолжительности, а станет« cookie »сеанса» ... Спасибо за попытку. –

0

Если вы используете куки-файлы в качестве сеанса, то пришло время 0. Это означает, что он истекает, когда браузер закрывается. Вы можете попытаться изменить это число в контроллере, как показано в приведенном ниже коде. Посмотрите, если это имеет значение. Я не тестировал это, но это того стоит.

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!'; 
}