最近的web项目里要求同一账号不能同时登陆!
想了几种方法都有漏洞,谁有可行性方案。不甚感激!
想了几种方法都有漏洞,谁有可行性方案。不甚感激!
解决方案 »
- spring+hibernate3+struts2+oracle11g不允许有视图
- spring aop hibernate 'sessionFactroy' defined in file求助
- java生成Exe问题
- hibernat链接linxu下的mysql 总是提示找不到表!!
- 用JasperReports开发报表,如何在JSP中动态生成图表?
- hibernate中如何调用存储过程,请大虾给予详细介绍
- struts 输出问题
- jws技术探讨:欢迎各位高手进来共享一下经验
- 在Struts中的页面ReLoad问题(急啊)
- Weblogic6下有Start Default Server 选项Weblogic7 下哪个是???
- The server encountered an unexpected condition which prevented it from fulfillin
- myeclipse采用xfire根据wsdl生成本地文件报错
可以 此类问题最难的地方是用户非法退出。可以通过session超时解决。
web版不好处理,都有一定的漏洞。服务端定时扫描客户端比较浪费资源。
用session超时则非法退出之后到session过期之前该账号将不能登录了!
情况之二:第一个用户登录了,第二个用户登录挤掉第一个。
针对于第一种情况,可以在数据库设置用户状态,也可以在缓存,这个很容易实现,现在讨论浏览器异常关闭
的情况如何处理
可以考虑以下3个方法:
1。session失效,实现比较简单,也很保险,但缺点是实时性太差。
2。ajax轮询,也就是在客户端写个定时器,定时通过ajax方式发送一个信号到服务端,当服务端过了最大时间都没有接收到信号说明客户端已经关闭。
3。客户端用一个脚本监测是否关闭
window.onbeforeunload = function onunload_handler(){
//浏览器关闭的时候会执行到此处
//处理用户信息,使之变成离线状态
}IE fireFox支持
加一个session 监听器
下一次这个用户可以根据userId之类的信息找到上次登录但还没失效的session,并让其失效
在页面上写 用js 访问session的代码(可以使用ajax)(用定时器 定时访问当前登录用户的session,保持 session的可用性)。
当浏览器异常退出,或者被关闭, session将不会再被访问到,这样session超时10秒,就会销毁。 或者用户注销 ,服务器主动销毁session。当一个用户登录的时候 只要浏览器没有被关闭,session应该是一直都有效的。 只要用户一关闭浏览器。过十秒后,session就会超时销毁。当一个用户已经登录,这个账户再次登录的时候,只需判断是否在session存在。。如果存在 则是已经登录 不存在则没有登录
用户登录时,先判断hashmap中当前用户的userid是否存在,若不存在,则添加到键值对,若存在,且后面的sessionId跟当前登录的不一样,先取出先前的seddionid做删除操作,而后重置当前的sessionId。
用户登出时,直接对hashmap里面的sessionId操作删除