2010-10-14 93 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存在写一个新的?否则,您可能每次都创建一个新的cookie,因此每次都会覆盖过期时间。 – 2010-10-14 16:02:53

+0

是的,我没有手动删除cookie。实际上,我设法获得了一个真正的持续时间,并且通过将Security.level置于中等水平不仅仅是一个“Session”cookie,但我仍然没有真正理解所有这些背后的逻辑。 – 2010-10-14 16:11:47

回答

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”...谢谢你尝试。 – 2010-10-19 10:02:29

0

如果您使用cookies作为会话,则时间设置为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!'; 
} 
相关问题