1

我有一个电子商务 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,这是浏览器关闭时会话结束的默认设置。

当用户关闭浏览器时,我还应该尝试哪些其他措施来防止 cookie 被破坏?

4

1 回答 1

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 中,这样它就不会影响您的其他项目。

于 2013-08-19T05:13:42.353 回答