2 aboutblank coco aboutblank_coco 于 2015.07.03 22:04 提问

如何利用cookie监听浏览器关闭,保存登出日志 5C

web项目里嵌套了另一个项目,用长连接监听浏览器关闭或者刷新时间,然后记录日志。但是我的初始化长连接的JS的页面在切换菜单或者刷新时都会重新加载,造
成数据库记录混乱。问了一些人说可以用cookie做一个类似全局变量,然后根据这个变量判断。但是我一点思路都没,求指导。详细些

4个回答

aboutblank_coco
aboutblank_coco   2015.07.03 22:07

登录web外面框架之后,菜单是在另一项目里。持久化也在嵌套的项目里操作

caozhy
caozhy   Ds   Rxr 2015.07.03 22:20

浏览器关闭判断是不可靠的。突然断电,浏览器意外关闭,网络中断都会导致服务器没法收到通知。你的后端逻辑需要重新设计。不能指望前端正常它才能正常。

caozhy
caozhy 回复aboutblank_coco: 客户端每分钟轮询一次。服务器收到轮询判断累加。
2 年多之前 回复
aboutblank_coco
aboutblank_coco 你说的有道理。如果是单纯记录登录次数,那么简单;但是这里需要记录登录时长,如果非正常退出,不能保证数据正确、及时存入,这里时间就不正确。请问你有什么建议吗,在非正常退出事件发生时。
2 年多之前 回复
showbo
showbo   Ds   Rxr 2015.07.04 14:11

用框架来加载你要显示的页面,这样点击页面的链接就不出发离开事件,然后父页注册/onunload事件,如果刷新了父页用同步ajax注销登录并写入注销时间,同时注册onbeforeunlaod事件给出是否离开提示

总体思路就是不允许刷新父页,你可以同时写一个通用js禁用键盘的F5刷新,ctrl+R刷新操作,防止用户误操作(点击浏览器的刷新按钮进行操作就没办法控制了,点击浏览器刷新按钮就当做注销了,但是可以通过onbeforeunload事件给出提示)

yukon12345
yukon12345   2015.07.04 17:11

以前我想过用unlaod事件判断关闭浏览器,实际不可取。
其实利用cookie还是有点办法的:
js不用轮询服务器,只要依间隔不断记录cookie就行了。
比如1分钟内先获取,在cookie记录一次,登陆系统时候立即进行一次cookie读取操作。
如果获取的cookie时刻超过1分钟就说明关闭浏览器后重开的。发给服务器信息
检测刷新的话就是短于一分钟cookie。发给服务器信息
如果要检测离开的话还是得靠seesion的。

Csdn user default icon
上传中...
上传图片
插入图片