Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭浏览器/选项卡时php销毁会话并从mysql中删除记录_Php_Mysql_Session - Fatal编程技术网

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

关闭浏览器/选项卡时php销毁会话并从mysql中删除记录,php,mysql,session,Php,Mysql,Session,我有一些问题的答案,比如php表单。。。当用户在最后回答问题时,他/她将得到结果 我想,如果在一个测验中有5个问题,用户提交1个问题后关闭浏览器或选项卡。我希望,如果用户关闭浏览器或选项卡,或者如果该页面在lightbox iframe中打开,则在关闭时,其提交的数据将根据会话id从数据库中删除。您需要使用窗口关闭前触发的onbefore事件。您可以获得以下方面的更多详细信息: 如果您使用的是jQuery,您只需要监听该事件,然后将会话ID发送到接收会话ID的php脚本并删除记录 $(wind

我有一些问题的答案,比如php表单。。。当用户在最后回答问题时,他/她将得到结果


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

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

如果您使用的是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']; ?>' });      
});
$(窗口).on('beforeunload',函数(e){
//关闭浏览器时要执行的代码
$.post(“用sessionID.php删除”{action:'delete',sid:'});
});

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

您可以使用简单的php和mysql代码删除记录,也可以使用自动化

SQL代码:

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

什么都没发生。。。我已经在lightbox中打开了该页面,作为iframe中的外部页面。即使我在另一个选项卡中打开它,它也不工作。那个叫做php的页面必须有代码来清理你想要的东西-会话,一些mysql数据等等…是的@TomasH,你能帮我吗???我这样做是为了当用户完成表单时,然后我运行一个查询来清洗mysql表中的数据。它工作正常,但我不知道如何做。如果用户没有完成测试并在之前退出,那么如何从mysql表中清除数据。或者我不确定我是否理解您的问题-如果您说您已经在用户访问时编写了代码完成操作后,使用或对数据库执行一些SQL删除会话遵循相同的原则?如果执行此命令,并且完成测验的人也将删除其数据???这只是一个示例代码,您可以将其更改为仅删除未完成的测验。您必须告诉用户他们只有10分钟完成测验。您可以将过期时间更改为30分钟,甚至可以根据上次用户请求更改过期时间。
CREATE EVENT myevent
ON SCHEDULE EVERY 10 MINUTE
DO
  DELETE FROM quiz WHERE time_started < (NOW() - INTERVAL 10 MINUTE) and quiz_completed != 1
SET GLOBAL event_scheduler = ON;