浏览器关闭时保存会话数据

时间:2012-06-10 22:52:47

标签: php session session-state

我想知道保存购物车的最佳方法是什么。即使用户关闭浏览器,我也希望购物车详细信息(会话变量)能够持续存在。一旦窗口关闭事件被触发,我会考虑将数据保存在表中,但我不确定jquery unLoad或beforeUnload事件是我需要的,因为它们似乎不能在不同的浏览器中工作。

我很感激任何指引我走上正确的道路

6 个答案:

答案 0 :(得分:4)

当浏览器关闭时,并不是在浏览器中保留会话cookie。如果我理解正确,你正在使用会话(即$ _SESSION变量),所以它应该相对容易。 PHP的函数session_set_cookie_params很可能是要走的路;还有一个选项session.cookie_lifetime(找到here)可以解释会话的cookie生命周期,即使你不能自己设置它。

会话cookie的生命周期以秒为单位;因此,如果您将其设置为60秒并访问该站点,会话cookie将在丢弃cookie之前仅持续60秒,从而有效地破坏会话。将生命周期设置为较高的数字以防止这种情况发生。

答案 1 :(得分:1)

由于会话数据是服务器端的,并且所有浏览器都是会话ID,因此您需要做的就是使会话ID持续更长时间。

这是通过编辑php.ini设置来完成的,特别是有关会话cookie生命周期的设置。如果是0,则在浏览器关闭时清除cookie。

尝试将其设置为较高的数字。这将使会议持续下去。

答案 2 :(得分:1)

可能在数据更改时保存数据,而不是在浏览器关闭时保存数据。保存可以在数据库,本地存储或Cookie中。

答案 3 :(得分:0)

为什么不保持购物车数据保持不变。如果你想要它们在网站上并且在他们离开时仍然需要它,那就坚持下去吧。在会话被放弃时可靠地接听是非常棘手的,因为它们可能会关闭机器或终止浏览器进程。应该保存对购物车的每次更改,直到他们明确杀死购物车或与之相关的cookie。

答案 4 :(得分:0)

您只需在数据更改后立即保存数据。干嘛要等?只要有人将商品添加到购物车中,请将其保存。

答案 5 :(得分:0)

jQuery unLoad方法无处不在。当你谈论桌子时,我假设你想把购物车存放在DB中。因此,您必须对服务器进行同步ajax调用,因此PHP可以存储它并可能返回一个标识符,您应将其放入cookie中。

问题是此程序可能需要相对较长的时间(1-2s)。我只是提供一个保存按钮。