我正在为一家研究公司开发一个Web应用程序,其中一个要求是用户一次只能登录一台设备。
所以我开发了一个非常基本的系统,当你登录一些PHP更新数据库中用户的行从0到1时,当你点击注销按钮时,它再次从1到0更新该行。
唯一的问题是,如果用户不使用注销按钮并且只是关闭浏览器,它将结束会话并将其注销,但数据库中的行将不会更新。
有没有办法在浏览器关闭时更新数据库?
答案 0 :(得分:5)
您可以使用unload事件向服务器发送ajax请求,该服务器将更新mysql中的标志。您可以尝试遵循jquery语法。
$(window).bind('unload', function(){
$.ajax({
type: 'get',
async: false,
url: 'path/to/file.php'
});
});
答案 1 :(得分:5)
没有可靠的方法。你可以在页面关闭时调用一个javascript函数,然后向你的服务器发出一个请求,告诉它会话已经完成,但是:javascript可能会被关闭,甚至可能根本没有执行。最好的办法是使用超时:存储最后一次操作的时间。如果超过10分钟,会话“到期”。
答案 2 :(得分:1)
这是浏览器关闭事件的简单解决方案。我遇到了“onunload”和“beforeonunload”事件的一些问题。它将在浏览器关闭,标签关闭,任何链接点击,URL更改时触发。所以我定制了这样的代码。
<script type="text/javascript">
jQuery(document).ready(function() {
var validNavigation = false;
// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
validNavigation = true;
}
});
// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});
// Attach the event submit for all forms in the page
$("form").bind("submit", function() {
validNavigation = true;
});
// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function() {
validNavigation = true;
});
window.onbeforeunload = function() {
if (!validNavigation) {
var status = 'abandoned';
$.ajax({
type: "POST",
url: your action URL,
data: "status=" + status,
success: function(res) {
},
});
}
};
});
</script>