php在关闭浏览器/选项卡时销毁会话并从mysql中删除记录

时间:2015-08-23 06:19:12

标签: php mysql session

我有问题答案quizes php表格...当用户在结束时回答问题他/她将得到结果。

我希望如果在测验中有5个问题,用户在提交1个问题后关闭浏览器或标签。我希望如果用户关闭浏览器或选项卡,或者如果在lightbox iframe中打开该页面,则关闭后,他的提交数据将根据会话ID从数据库中删除。

2 个答案:

答案 0 :(得分:0)

您需要使用窗口在关闭之前触发的onbefore事件。您可以获得更多详细信息:

https://developer.mozilla.org/en/DOM/window.onbeforeunload

如果您正在使用jQuery,您只需要监听该事件,然后将您的会话ID发送到接收会话ID的PHP脚本并删除您的记录。

$(window).on('beforeunload', function (e) {
    // code to execute when browser is closed
    $.post("delete_with_sessionID.php", { action: 'delete', sid: '<?php echo $_SESSION['ID']; ?>' });      
});

答案 1 :(得分:0)

执行此操作的最佳方法是将测验的到期时间设置为5分钟或10分钟。当用户开始测验时,将当前时间保存在数据库中,然后您可以检查数据库并删除过期和未完成的测验。

您可以使用简单的php和mysql代码删除记录,或使用MySQL Scheduled Event自动化。

SQL代码:

DELETE FROM quiz WHERE time_started < (NOW() - INTERVAL 10 MINUTE) and quiz_completed != 1

MySQL预定事件:

CREATE EVENT myevent
ON SCHEDULE EVERY 10 MINUTE
DO
  DELETE FROM quiz WHERE time_started < (NOW() - INTERVAL 10 MINUTE) and quiz_completed != 1

要使用MySQL Scheduled Event,您必须执行以下命令

SET GLOBAL event_scheduler = ON;