【问题标题】:How to keep cookies from expiring even after browser restart in CakePHP application即使在 CakePHP 应用程序中重新启动浏览器后,如何防止 cookie 过期
【发布时间】:2013-08-20 19:54:21
【问题描述】:

我有一个电子商务 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 被破坏?

【问题讨论】:

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


    【解决方案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 中设置它,这样它就不会影响您的其他项目。

    【讨论】:

    • 所以将以上几行添加到 php.ini 文件应该可以解决问题,还是我仍然应该在 core.php 中定义 session.cookieTimeout?
    • 是的,您需要将会话 cookie 超时值设置为大于默认值。
    • 我试过了,但没有改变任何东西。事实证明,如果我只是将“session.cookie_lifetime = xxxx”添加到 php5.ini 并重新启动服务器,那就可以了!问题是,这样做是否会出现任何错误或不可预见的问题?
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多