方法有好多种,但应该都跟心跳请求类似。
首先用户打开一个页面后,页面里面会有段js脚本来反复请求一个地址,即判断用户是否在线的地址(跟新浪微博隔一段时间请求一个地址查看是否有新消息类似)
比如判断页面为A,打开的页面为B ,则B 内的js脚本以ajax请求的方式每隔1分钟来访问A,A可以记录下最后一次的请求时间,然后你就可以拿这个最后一次请求的时间来判断用户是否离线,比如B每隔1分钟发送一次请求,如果最后活动时间与当前时间相差两分钟,就可以认为用户已离线。
还有一种方法,就是利用js的onunload事件
当用户关闭浏览器的时候,可以用onunload发送一个请求,注销掉session,或者将用户状态置为离线,都可以,不过没有上面靠谱就是,因为F5刷新页面也同样触onunload事件
方法还有很多,结合你需要实现的功能和业务,多想想就出来了
其实HTTP协议是无连接的,数据交换完毕就断开了,理论上服务器上无论用什么语言写的程序,都不可能知道客户端的用户是否在线。
用session可以简单实现,但是也不十分准确,有局限性
用户登录后将信息写入session,session 设置过过期时间,然后验证用户session就行了
用数据库太麻烦
应该这样做做:在数据库的user表或者其他表,加上一个标志位字段state,为bit类型;
用来记录登入或者没有登入;登入的state为1,否则为0;因此你读取state列来判断
在有效期内,sessionid是不是被用过。