用户关闭浏览器时从mysql表中删除信息

时间:2010-02-03 21:27:02

标签: php mysql session

我创建了两个名为

的表(在mysql中)
  1. table_temp_guest
  2. table_temp_order
  3. 现在如果客人进入,那么我们将他的个人信息保存在第一张表中,如果他从任何摊位购买了东西,它就会在table_temp_order中保存为临时订单。

    现在我的问题是:

      

    我正在使用会话ID,所以当用户进入注销(没有结账)时   我使用会话ID从两个表中删除他的信息(个人和订单),   但如果他关闭浏览器,或者没有去结账(任何共鸣)那么如何   从两个表中删除他的信息   请建议我怎么做?

    其他问题:  是否有其他方式通过其他方式完成整个过程。

5 个答案:

答案 0 :(得分:4)

您无法检测用户何时关闭浏览器或键入新地址。您基本上需要像其他网站一样拥有“超时”功能。

答案 1 :(得分:2)

您可以使用javascript检测到window.onunload事件,但它不受普遍支持,并且会检测窗口关闭,而不是浏览器关闭。

您的最佳解决方案可能是跟踪session_id和上次访问日期。在每个页面加载时重新更新表格last_accessed_date,并删除超过几个小时的所有内容。

答案 2 :(得分:1)

超时是最好的方法。

记录来宾表中的最后一个活动时间。让一个cron作业定期在Web服务器上运行,清理超出您希望允许的最长时间的会话。

请注意您允许的时间。您必须允许缓慢的用户和断开的连接。

答案 3 :(得分:1)

如果你正在使用session_id()(我想这是你的会话ID的意思),只需使用php会话。 PHP会自动为您自动使用它们,并且您不需要这两个表(您可以在$ _SESSION中存储所需的所有内容)。

没有办法检查broswer是否未关闭,你可以依赖。

如果您不想改变项目现在的工作方式,只需在表格中添加一个创建的字段,并在您“看到”特定用户时将其设置为当前时间()。然后设置一个cronjob,删除此表中所有早于特定超时的记录。

答案 4 :(得分:0)

此外,您可以尝试使用可在客户端运行的脚本并ping服务器,以便您知道脚本是否已暂停,用户关闭了浏览器。话虽这么说,我同意以前的海报,超时/清理程序是最好的。

为此您可以向表中添加ModifiedDate字段,您可以将其设置为“ON UPDATE”字段以便于使用,然后只删除所有具有较旧时间的ModifiedDate字段的记录。