即使在CakePHP应用程序中重新启动浏览器后,如何防止cookie过期

时间:2013-08-19 05:03:08

标签: php cakephp cookies cakephp-1.3 session-cookies

我有一个电子商务cakephp(v 1.3)应用程序,客户可以在其中添加东西到购物车。只要用户不存在浏览器或未超过会话超时时间,就会保留定义购物车内容的会话变量。但是如果他们关闭浏览器(IE / Firefox),那么购物车就会变空,因为cookie被破坏了。奇怪的是,Chrome没有这个问题,这是另一个谜。

我尝试更改/app/config/core.php文件中的Session.cookieTimeout变量,但这没有任何效果。每当我在浏览器开发工具上提取cookie信息时,它会显示cookie名称“PHPSESSID”,并且到期时会一直显示“会话何时结束”。

我还尝试使用$ this-> Cookie- $ time在AppController beforeFilter()函数中覆盖cookie过期时间,但是没有做任何事情来定义会话cookie超时。

我的猜测是某些设置会将Cookie超时设置为0,这是浏览器关闭时会话结束的默认设置。

当用户关闭浏览器时,我应该尝试阻止哪些内容被销毁?

1 个答案:

答案 0 :(得分:1)

<强>更新

session.cookie_lifetime指定发送到浏览器的cookie的生命周期(以秒为单位)。值0表示“直到浏览器关闭”。默认为0.另请参见session_get_cookie_params()和session_set_cookie_params()。

我认为将session.cookie_lifetime设置为如此高的值意味着您的服务器上会有很多陈旧的会话,如果您有大量会话,这可能是一个问题 - 通常会话存储在系统的/ tmp文件夹中。当这个文件夹(通常在* nix机器上)填满它可能会导致机器出现问题 - 进程开始锁定,因为无论出于何种原因它们都无法创建临时文件。 (您可以将session.save_path更改为/ tmp以外的其他内容,这样您就不会遇到此问题 - 尤其是在共享主机上。)

并且在.htaccess文件而不是php.ini中设置它,这样它就不会影响你的其他项目。