我无法弄清楚有关会话、浏览器和 Magento(或者可能是任何购物车)的一些事情。我了解默认情况下 24 分钟不活动将关闭会话。我还了解到,当您完全退出浏览器时,该会话也将关闭。
为了测试第二部分,我访问了我的 Magento 商店,在我的购物车中添加了一个产品,然后完全退出了我的浏览器。我重新打开浏览器,产品仍在购物车中。怎么会这样?PHP 垃圾收集器是否只在特定时间运行?我认为该会话将失效,因此无法链接到存储在我机器上的 cookie。任何帮助表示赞赏。
原生 PHP 会话使用一个 0 过期的 cookie,它会在浏览器窗口关闭后立即被清除。Magento 的会话 cookie(如 Emi 所述)有 3 小时的有效期,并且将在浏览器会话之间持续存在,因此关闭/打开浏览器窗口不会导致会话重新启动。Firefox Web 开发人员工具栏或 Chrome 的开发人员工具将允许您强制清除 cookie 并重新启动会话(如果您想要这样做)。
我还应该注意,虽然 cookie 名称不同并且有过期时间,但 Magento 确实使用 PHP 的本机会话支持。这意味着 php.ini 中与最大会话生命周期等相关的设置也会影响 Magento 的会话。
此外,从 Magneto 1.6(和 EE 1.11)开始,有一个称为持久购物车的功能,它建立了一个长期 cookie,用于在会话之间维护您的购物车。如果您测试是否维护会话只是查看购物车,则此功能可能会使您的会话看起来比实际时间长得多..
服务器无法真正区分关闭窗口、停留在页面上还是四处浏览。至少,不是没有额外的脚本,这不是 Magento 内置的。如果要测试会话,请等待 24 分钟,尝试其他浏览器,或清除服务器上的所有会话文件。
会话存储在站点服务器的本地(大多数情况下在文件系统中,但您可以使用其他类型的数据存储,例如:数据库、apc、memcached...),这是在 local.xml 中配置的。当存储在文件系统中时,您可以在 /path_to_site_root/var/sessions 下找到它们 我相信您有 3 个使用会话的模型:“核心/会话”、“客户/会话”和“管理员/会话”您还可以配置 php 的垃圾收集器:http ://ca.php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime
当您关闭浏览器时,如果 cookie 已过期设置为 0,它将不再使用http://ca.php.net/manual/en/function.setcookie.php Magento 的默认 cookie 称为前端,我认为它有expire 设置为至少和小时,你也不能从 javascript 修改这个 cookie,因为它只是 http。