删除查询应在会话自动销毁后执行

时间:2013-01-16 07:19:14

标签: php mysql session

我遇到会话破坏问题。我正在该文件中运行一个名为logout.php的脚本我正在销毁用户会话我也在执行一个查询,这将删除我的购物袋。这是正常工作,但当我关闭浏览器或会话后一段时间自动销毁,那时我必须删除我的购物袋,在这种情况下logout.php将不会调用。那么我怎样才能实现这一点。

logout.php: -

<?php
include_once('functions/config.php');
session_start();


$sql = "DELETE FROM baskets WHERE member_id = '".$_SESSION['memid']."' ";

mysql_query($sql);

session_destroy();   


header('location:index.php')

?>

3 个答案:

答案 0 :(得分:2)

没有办法编写可以安全地假设在会话被销毁时调用它的代码。

最简单的方法就是在你的购物篮上设置一个“最后访问”的时间戳,你在每次访问时都会更新,然后每隔一小时左右运行一个cron作业(预定作业),删除所有没有的篮子被访问过,比方说,6小时或更长时间。这不会在会话超时的同时删除它,但从长远来看会将旧的篮子从数据库中删除。

答案 1 :(得分:1)

我对这个问题有两个答案: 1)您可以使用javascript事件window.onbeforeunload清除您的购物袋  例如:

     window.onbeforeunload= function(){
        // your ajax call to clear shopping bag
     }

2)我会推荐这个选项:   您可以在登录时清除用户购物袋。

答案 2 :(得分:0)

您是否确定要在(例如)用户&#39;之后清理购物袋?浏览器关闭?您可以发出警告,例如上次您没有正确退出,是否要继续购物或重新开始?&#39; ,像这样的。

HTTP是一种无状态协议,因此您无法确定浏览器何时实际关闭。在我看来,你需要处理会话超时,以便在一段时间过后,购物袋无论如何都会被清除,除非仍有用户活动。

希望有所帮助。