2013-06-21 77 views
1

我正在使用CakePHP 1.3,并且会话超时有很多麻烦。CakePHP - 会话超时 - 空闲用户

所以,这里是我的core.php文件。

Configure::write('Session.save', 'cake'); 
Configure::write('Session.cookie', 'TESTING'); 
Configure::write('Session.timeout', '0.01'); 
Configure::write('Session.start', true); 
Configure::write('Session.checkAgent', false); 
Configure::write('Security.level', 'low'); 

这里谈到的第一个问题,关于session.timwout它被指定为秒,但如果我使用的低,让5个小时我的cookie过期把1(?)。使用这个设置我得到3分钟cookie过期,我不明白,它应该是1×300秒= 5分钟。那是什么样的数学?

而主要的问题是,这是不被尊重,当我登录到我的网站,我可以看到它产生一个会话,并在3分钟内过期,但只要我登录并点击一个链接,我回来了到登录页面,这意味着我得到不到30秒的身份验证。

我想设置这样一个低值进行测试,我知道高和中等安全值重新请求之间的会话,但我想了解发生了什么事。

非常感谢。

回答

1

会话生存期和Cookie生存期不相等。 Session lifetime

Security::inactiveMins() * Configure::read('Session.timeout') 

计算,其中为cookie lifetime

Configure::read('Session.timeout') * (Security::inactiveMins() * 60) 

计算等等low1导致的300秒会话生命期的会话超时的安全级别,以及cookie的生命的18000秒,即5小时。

当使用0.01秒超时时,会话有效期为3秒,cookie的有效期为180秒,因此您的注销速度如此之快。

正如你亲自体验过的那样,没有必要担心更长的cookie生命周期(我想这是为了防止cookie在会话超时前失效,但我可能会错误),一旦会话超时,cookie是being invalidated,最后是overwritten

+0

嗨@ndm,感谢您的回复,我需要做一些测试,并且我想将session lefetime设置为5分钟,为了获得该值,我将session.timeout设置为1,并将安全级别设置为低。 1 * 300 = 300秒或5分钟!但是当我检查cookie时,它会设置5个小时,如果我在会话的5分钟后发送一些帖子,它仍然有效,我想我应该已经注销了,对吗? – Jeff

+0

对不起,当然我会'5'小时(我编辑了我的答案)。 '5'小时的Cookie使用期限是正确的,是的,无论Cookie使用期限是多长,在'5分钟会话超时后应该注销。我刚刚用你的价值观试了一下,它的效果很好,会议在'5分钟'不活动之后就开始无效了,我正在注销。您的应用可能会发送自动化的AJAX请求,导致超时更新? – ndm

+0

哦,是的!在页面上有一个专门用于避免超时的AJAX!感谢吨@ndm,我会删除它,并做我的测试! =) – Jeff