BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #27441同步于 2014/9/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

Web服务器如何侦测客户端(浏览器)关闭?

sxh
2014/9/1镜像同步16 回复
总结几点: 1.客户端关闭是不会向服务器发送消息的。 2.如果客户端关闭了再打开重连服务器也是创建新的session了,所以不用担心保留用户信息问题。 3.有很多轮询(ajax)或者长连接(Websocket)甚至js也能让页面关闭发出信号。服务器单独针对这些信号编程即可。 一个Web server,需要有一个列表维护有哪些用户正在浏览网页并记录相关信息。但是用户退出后如果不及时更新列表迟早会溢出。 最后我弄了两个办法,有些想不明白,求指教。 第一肯定是建个数据库来存,这样就再也不用担心内存不够用了...但是估计会很慢而且这个方法感觉微2。。不过要做一个用户行为分析什么的倒是挺有用。 第二就是侦测浏览器关闭发出的信号了,然后根据这个信号来更新列表。但是Google了半天也没弄明白,请讲讲呗?我拿python写的,从来没侦测到firefox关闭后向我的服务器socket端发出了什么啊。 来自「北邮人论坛手机版」
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Chon机器人#1 · 2014/9/2
用js检测呢? http://stackoverflow.com/questions/1631959/browser-window-close-event?lq=1
wzcc机器人#2 · 2014/9/2
我能想到的一种方案是客户端 window.onbeforeunload = function(){}, 在关闭之前再进行一次http请求
binux机器人#3 · 2014/9/2
no way!http 是无状态的!
binux机器人#4 · 2014/9/2
http://bbs.byr.cn/#!article/WWWTechnology/26949
sxh机器人#5 · 2014/9/2
There is no way to know on the server-side (unless you are using some JavaScript to send a message to the server) that the browser has closed. How could there be? Think of how HTTP works - everything is request and response. 师兄你是对的。 那一般来说成熟的框架怎么解决这个问题呢? 【 在 binux 的大作中提到: 】 : http://bbs.byr.cn/#!article/WWWTechnology/26949 来自「北邮人论坛手机版」
sxh机器人#6 · 2014/9/2
嗯。。我觉得可以在生成客户端页面的时候自动加入这个script。是这个意思吧? 【 在 wzcc 的大作中提到: 】 : 我能想到的一种方案是客户端 window.onbeforeunload = function(){}, 在关闭之前再进行一次http请求 来自「北邮人论坛手机版」
sxh机器人#7 · 2014/9/2
有点没弄明白,这个jq事件是指的用户关闭整个浏览器才触发还是光是单个页面(比如刷新)就触发? 【 在 Chon 的大作中提到: 】 : 用js检测呢? : http://stackoverflow.com/questions/1631959/browser-window-close-event?lq=1 来自「北邮人论坛手机版」
binux机器人#8 · 2014/9/2
来点正常点的解法吧 1、定时发送心跳给服务器,超时表明客户端离线 2、各种长链接,检测断开
Chon机器人#9 · 2014/9/2
页面 【 在 sxh 的大作中提到: 】 : 有点没弄明白,这个jq事件是指的用户关闭整个浏览器才触发还是光是单个页面(比如刷新)就触发? : 来自「北邮人论坛手机版」