日期:2014-05-18  浏览次数:20766 次

csdn就没高手吗?csdn没落了吗?一个简单session问题都没人知道?
就是关闭页面时,关闭session的问题。
现要在关闭页面的时候将 "用户在线表 "中的状态改成 "不在线 "
我要在jsp页面关闭时清空session,
不清空的话, "用户在线表 "总显示在线状态,就不能再登录了
网上查了下发现几种方法不太好
1.利用onunload事件弹出一个新窗口来关闭session.
弊端:一些客户端IE设置会阻止弹出窗口,刷新好像也会运行onunload事件
2.要在关闭网站最后一个窗口时才关闭session
忘大虾能给出完美解决方案,最好有列子或源代码参考~
谢谢了啊~
明天要再解决不了,经理非把我T了不可~
在线等~急急~
3.希望方法能适用于所有浏览器
4.本网站要求session超时为30分钟
5.cookie客户端可能会关闭
6.   要能解决   启动任务管理器,选中IE进程,强制终了,关机,拔电源等等物理手段
    也要能清空session
7.不能让客户在关ie后再等30分钟登录,要能马上重新登录

------解决方案--------------------
up
------解决方案--------------------
不怎么好弄吧
本来也想这么弄来,后来发现有点困难。
等待高手出现!
------解决方案--------------------
想不到完美解决方案 还觉得你的要求得继续增加一项:
那就是关闭浏览器的时候,你得判断用户有没有开着其他的窗口,用户有没有用多种浏览器同时在访问,如果你在关闭浏览器就让session失效,那么用户会很郁闷,因为他只是关了一个页面而已。
------解决方案--------------------
既然是这么"简单",你自己怎么解决不了?
------解决方案--------------------
为什么不在登陆之前清空session呢?
还有CSDN做到了,你给他写封信让他给你个方案

------解决方案--------------------
退出网页时3 加这段代码:
session.invalidate();
这样退出时就把网页session清空了
------解决方案--------------------
楼上说的对,调用session.invalidate();一定会清除SESSION的,所以你想想怎么调用就是了。
------解决方案--------------------
这问题好简单呀
首先你要判断 用户关闭的是第几个网页?
For_suzhen(不懂装懂) 的办法可以呀 登陆前清空session


------解决方案--------------------
这个建议用AJAX吧
如果某用户30分钟内不发一条信息过来
就删了她的SESSION
------解决方案--------------------
session.validate()
------解决方案--------------------
这个问题理论上面好象是没有办法做到

在客户端发送消息,当非正常关闭时就没有效果了


------解决方案--------------------
//拔电源
这不太好处理吧,突然间断电,程序还没来得及反应,怎么处理?
------解决方案--------------------
和我刚刚解决的问题一模一样,如果我直接关闭IE的话,服务器是不会知道的
我的做法是在session之外用用户ID 维护另外一套session信息HashMap,记录IP , sessionID
且这个信息会在session timeout的时候删除。

非正常退出后,再次登陆会依次比较:同ip的话,就直接进入了,换机器的话则需要额外的认证。

------解决方案--------------------
1.利用onunload事件弹出一个新窗口来关闭session.

你非要弹出新窗口啊?
你既然都知道用onunload来监听, 就不会在onunload里提交一个表单给SERVLET? 然后在SERVLET里调用session.invalidate();

思维要发散
------解决方案--------------------
请不要用“简单”来侮辱你自己
------解决方案--------------------
两个思路,其他的都不能完美解决
1. 用ajax,每隔一段时间(比如30秒)就把登录ID传给服务器.没收到的话就认为他已下线.那该怎么处理就怎么处理.
2.第二次登录就直接踢掉上一次登录(我见过的大多数系统都采用这种方式.)

决不应该用session来判断一个用户是否登录.session是用来保存一个用户临时数据的.不是用来指明用户是否存在的.如果用户关了浏览器,那么他的session id自然就没有了,对应的session在设定的存活期过后(比如10分钟)就会自动销除.当然正常情况你也可以要求用户点退出按钮,在这里删掉session以节约资源.
------解决方案--------------------
ajax可以实现无刷新的与服务器交互,这样就不用弹出新窗口了
onunload = remove()

function remove()
{
var url = "/servlet/ajaxShowActionServlet/ ";
var method = "post ";
var param = "flag=remove&fileName= "+$(fileName).value;