这真让我烦恼。已经多年了。无论我使用core.php或php.ini做什么,我的登录大约一小时后就会超时 - 通常。在相当长的时间之后,相同代码和配置的某些部署会超时。
这就是我现在在一个网站上所拥有的 - 大约一个小时后超时:
session.gc_divisor 1000
session.gc_maxlifetime 86400
session.gc_probability 1
Configure::write('Session.timeout', '28800');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'medium');
另一个 - 持续了一整夜:
session.gc_divisor 100
session.gc_maxlifetime 14400
session.gc_probability 0
Configure::write('Session.timeout', '315360000');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'medium');
现在,在你兴奋之前说:“好吧,答案就在于Session.timeout值”,让我告诉你这个网站通常会在大约二十分钟后超时!
答案 0 :(得分:4)
在某处我读到共享主机,其他应用程序可以通过清除php定义的会话目录来重置会话。罗尔夫在回答中提到了这一点。
CakePHP提供了配置会话处理方式的选项。在core.php
我将其更改为'cake'
(默认情况下为'php'
):
/**
* The preferred session handling method. Valid values:
*
* 'php' Uses settings defined in your php.ini.
* 'cake' Saves session files in CakePHP's /tmp directory.
* 'database' Uses CakePHP's database sessions.
*/
Configure::write('Session.save', 'cake');
我还确保会话超时和相应的php.ini值相同:
/**
* Session time out time (in seconds).
* Actual value depends on 'Security.level' setting.
*/
Configure::write('Session.timeout', '86400');
到目前为止,系统还没有退出。
答案 1 :(得分:2)
我认为这不是特定于蛋糕的东西;我没有涉及任何框架时看到它 - 它很可能是你的PHP配置设置的问题。
您应该检查/做的事情来解决问题:
指定要存储的专用路径
session.save_path
中的会话(如果您尚未这样做)。
不要将它们存储在/ tmp中 - 其他一些进程可能会出现并擦除它们
为了你。
确保(我的意思是确实确定)session.gc_maxlifetime
的值是您认为的(如果您希望登录在24小时后超时,则为86400)不活动等。与session.gc_divisor
和session.gc_probability
相同。即使PHP Manual指定可以在任何级别设置会话设置,取决于PHP构建的笨拙(它们都以微妙的方式略微错误:))您可能会发现它们实际上并没有效果除非在全局php.ini文件中设置,而不是在代码,.htaccess等中设置。只需在实际应用中输出它们以确保它们已应用。
此外,根据您的环境,检查PHP CLI构建是否使用与默认PHP构建相同的php.ini文件 - 如果CLI构建使用另一个配置文件并且您使用CLI进行了cron作业构建时,cron作业脚本可以调用会话清理过程。
答案 2 :(得分:1)
如果你在同一台服务器上有很多CakePHP应用程序,这可能是你遇到麻烦的原因。不要忘记:
更改每个Cookie路径的名称:
Configure::write('Session', array(
'defaults' => 'php',
'timeout' => 4320,
'ini' => array(
'session.cookie_path' => '/name_app', // this for each app
)));