我的毕设是做一个类似于facebook的网站,在开发时遇到一个棘手的问题,如在用户登录时会在服务器端写入一个session记录用户的信息,于此同时会将登陆着的信息对象装入到服务器的链表里,用于观看哪些用户在线,当用户关闭窗口时可以触发一个js函数,让服务器端的session销毁,同时把用户信息从链表中删除,这个时候就知道该用户已不在线,但是问题在于我登陆账号后,打开多个页面,此时这多个页面里持有着同一个session,而当我关闭其中一个页面时,session便失效,如何做到在关闭最后一个网页才后触发js函数,使得session销毁,链表删除该用户信息
我不知道你的facebook是什么意思,但是我感觉你不应该自己摧毁session,你那个没有购物车吗?
有的话,你的购物车不放在session中吗?session没了,购物车不也没了吗???我不知道你怎么实现的。
但是我感觉你可以让session钝化然后等待服务器去摧毁这样也不占用资源
用一个map<String,Date> 类型来存储当前在线用户 key存储用户id value存储最新更新时间
当用户访问用struts 对应的在线方法时候。 先判断map里面是否存有对应用户id 不存在则加入。。时间为当前时间。 存在的话,将时间改成当前时间就好。。
用一个定时器来判断 当前时间 跟map里面所有用户在线更新时间做对比。。 如果超出一定时间长度 则认为离线了。。 这时候可以通过sessionid 让益处session.. 同时移除userid对应的的map记录
-------------------------------------------补充一下,我之前确实想过这个方式,给session设定一个周期,时间到了就自动销毁,但是感觉这样不是特别精确,如果登陆了两秒就下线,服务器端依然认为session是存在的,所以该用户依旧显示在线。但事实上他已经下线了你设置timeout为10秒不就行了。。 据我所知qq也是这样来判断是否掉线的。。 你可以用两个qq测试下非正常关闭一个qq,另外一个是不是要等几秒才能看到对方离线。。
==============================================================================
你写个ajax访问后台的方法 然后封装到js文件里面。。 每个在线页面都是都调用这个js文件。。