如果用户在不按登出的情况下关闭浏览器,如何使其处于脱机状态
How to make offline status if the user close the browser without pressing logout?
我有一个注销按钮,基于此我需要更新user-is:offline或online,但许多用户只是不使用该按钮,只是关闭浏览器。
按照以下代码进行了尝试,但它没有向服务器提交最后一个请求。如何做到这一点?
$(window).bind('beforeunload', function(e) {
//if (id>=2) {
// return "WARNING: Your status is call connected. If you refresh now, software will lose all the connection status.";
//} else {
// return "WARNING: Your status is not connected. You can refresh.";
//}
$.ajax({
type : "GET",//POST
dataType: 'json',
url : '/php/makeunavailable',
data : url,
async : true,
beforeSend: function() {
},
complete: function() {
},
success : function(msg) {
// do nothing but make offline
}
});
});
我做了一些类似于您在我的实验消息传递子系统中试图完成的的事情。
需要注意的一点是,您应该在服务器端强制执行空闲超时。使客户端每N
秒通知服务器一次其存在,并将在N + L
秒内未ping到的客户端视为离线,其中L
表示一定量的预测延迟(在高端,以避免大量的"拍打")。
在客户端,与onbeforeunload
相比,我在连接状态更改指示失败/中止时发送"最后一刻"请求的运气更好。诚然,这可能是由于我的代码中的一些非正统性。但是,浏览器在完全关闭窗口或选项卡之前自然会关闭连接。而且,它还有一个额外的优势,即当页面关闭之外的其他事情中止连接时会触发。所以,我运气很好。
我使用XmlHttpRequests,所以它看起来像这样,其中r
是我的请求对象:
r.onreadystatechange = function() {
if (r.readyState == 4) {
if (r.status == 200) {
// success logic
} else if (r.status == 0 || r.responseText == '') {
// assume the client aborted the connection
issueLogoutRequest();
} else {
// failure logic
}
}
}
完整的客户端源代码可能有帮助,也可能没有帮助。(它很大。)如果你想四处看看,它可以在消息子系统中的pointless.com上看到
如果你使用的是WebSocket,我不能保证这个策略同样有效。但是,我会首先尝试绑定到onclose
和onerror
,看看它们是否允许您在最后一刻触发XmlHttpRequest
。
我对此并不完全确定,但请尝试使用$(window).on
而不是$(window).bind
。它们都应该有效,但我一直使用$(window).on
。此外,您对function(e){
的引用是什么?我的第一个未经测试的本能是使用:
$(window).on('beforeunload', function(){
。
如果您在服务器中使用php,只需使用$_SESSION,因为当用户关闭浏览器时,它将自动销毁。通过aru定义这个url的方式data : url,
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何重写下面的函数,使其不会't用于循环
- Ember选择绑定-如何使其着火
- 动态修改一个元素,使其与给定的选择器匹配
- 如何使用javascript操作SVG节点,使其在MS Edge中工作
- Javascript将数组转换为字符串并使其反向输出
- 如何添加两个变量而不使其在javascript中连接
- Chrome内容脚本制作cookie;chrome重新启动时,cookie会被删除.如何使其稳定
- 如何进行AJAX调用,使其仅在我单击包含在特定类中的链接时触发;id”;父元素的
- 选择一个元素,使其最近的具有特殊属性的父元素具有特殊值
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 添加混合 javascript 函数,使内容淡入列内的另一个内容/使其适用于两个单独的列
- Jquery ui 位置,不能使其相对于当前项
- 如何使 thunks 独立于状态形状以使其可移植
- js代码适用于一个变量(?),如何使其适用于多个变量
- 如果用户在不按登出的情况下关闭浏览器,如何使其处于脱机状态
- 添加可拖放元素后,使其相对于可拖放元素的坐标
- 修改筛选器,使其仅应用于表中的可见行
- 动态JS:将填充图像应用于多边形形状时,使其褪色
- 是否有办法编辑此脚本,使其仅适用于特定的选择类