我想在用户退出页面时删除数据库中的用户存储数据。将出现一个窗口对话框,询问用户是否真的希望退出该页面。确认离开后,应向PHP发送一个Ajax调用,确认操作。 PHP是否可以及时接收调用并执行命令?如果没有,是否有任何其他方法来验证Ajax调用是否已成功发送并执行命令?
答案 0 :(得分:0)
你不应该使用不可靠,hacky和恼人的方法。接近您需求的唯一事件是window.onbeforeunload和window.unload,但弹出窗口通常会在这些事件中被阻止(因此 hacky ),并且在阻止剩余代码时也是如此。
还有一个问题就是关闭标签会触发事件,关闭浏览器会跳过它们,如果浏览器实际支持它,它将全部依赖。
也许每5分钟使用一次ajax调用来检测页面是否仍在运行并使用该时间更新数据库。
现在使用服务器cronjob,你应该选择time < now() - 300
的所有行,然后你应该有一个最近连接但不再发送任何信号的浏览器列表。
或者你可以每隔10秒将数据保存在localstorage中,那么就没有必要这么做了吗?
答案 1 :(得分:0)
如果您需要非常短暂的数据(仅在用户在页面上时相关),则数据库不是正确的工具。数据库旨在存储长期存在的数据。
我建议你改用会话。这是a quick intro。基本上,会话允许您在http请求之间保留数据,但在短时间内使数据到期。
当用户登录或打开您的输入页面时启动会话,并在用户在页面上时存储您要访问的任何数据{/ 1}}。
条目或登录页面
$_SESSION
下次用户发出请求时,请测试会话是否仍处于活动状态。如果是这样,您可以从会话中获取数据,并刷新到期日期。如果会话已过期,则可以销毁数据。
受保护的页面
<?php
if(session_status()===PHP_SESSION_NONE) session_start();
... work through your script
//store data you'll need later
$_SESSION['username'] = 'Linda';
$_SESSION['age'] = 22;
$_SESSION['expires'] = time()+ 60*15; //expires in 15 minutes
答案 2 :(得分:-1)
试试这个:
<script>
window.onbeforeunload = function (event) {
var message = 'Important: Please click on \'Save\' button to leave this page.';
if (typeof event == 'undefined') {
event = window.event;
//ajax call here
}
if (event) {
event.returnValue = message;
}
return message;
};
</script>