为什么我不能用cakePHP设置我的cookie持续时间

时间:2010-10-14 14:10:38

标签: cakephp cookies duration

所以,我尝试了很多东西,但是当使用谷歌浏览器中的开发者工具查看时,仍然总是使用持续时间设置为“会话”的Cookie。以下是我目前的设置:

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']);

我尝试使用$ this-> Cookie-> time = 3600更改Security.level,Session.timeout;并结合所有这些,但我似乎无法改变这段时间。此外,我尝试了短期和长期,因为我希望这个cookie能够持续尽可能长的时间。你能告诉我我做错了吗?

3 个答案:

答案 0 :(得分:0)

虽然我无法保证这会解决您的问题,但我可以解释如何正确配置会话。

首先设置Security.timeout变量。这表示以秒为单位的超时值,但这不等于会话到期时间。此数字乘以常数值,具体取决于Security.level变量的设置。

  

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

这就是给你过期时间的原因。例如,如果您的Session.timeout为30,Security.level为低,则您的会话将在30 * 300秒或150分钟后过期。

答案 1 :(得分:0)

如果您使用cookie作为会话,那么它的时间设置为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!';
}

答案 2 :(得分:0)

我遇到了同样的问题(CakePHP 1.3.7),现在只有将持续时间放在write()方法中才能正常工作:

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