我想做一个登陆,就是同一时间同一账户,只能一个人登陆,其他人用这个账户登陆 提示对方此账户已登陆。现在遇到一个问题,每次登陆的账户我都放到action一个静态map里面 每次登陆都去验证看登陆了没有,用户退出的时候去map删掉这个用户,但是当对方直接关闭浏览器。或者杀掉进程又或者死机这种非正常退出。我java后台写的监听器是监听不了Session销毁的。求大神指教啊。Javasession
解决方案 »
- 无法初始化 HibernateSessionFactory
- 求各位高手文档树怎么用Java写!!!
- 如何在org.apache.myfaces.custom.fileupload.UploadedFile获取上穿文件的路径名?
- 抽象类遇到的一个问题
- 关于SQLServer驱动的问题
- Help~~~~Help~~~~~Help~~~~~~~(Waiting online...)
- JSP的中文转码处理哪位GG,JJ帮忙啊
- 关于JBuilder7开发CORBA的相关配置!!!送分咯!
- JSP的-=数据池=-技术算不算得上效率最高的数据交换技术???
- 怎么把图片上传到另一个Tomcat目录下?
- 在war项目启动时如何启动自己的线程?急求救!!!如内
- Excel 2007导入时日期格式是一个数字,怎样将此数字再转化为日期类型
存在的话,检查对应的 session 是否存在, 不存在就正常登录
如果你还是要现实这样的需求,那就用AJAX,当用户登陆后就每过比如10秒请求一次服务器,进行验证,用户是否在线。在服务器获取最后请求时间,如果超过比如20秒就断定用户已下线就删除SESSION。
另外介意LZ用WEBQQ的做法,后登陆的可以把先登陆的强制挤下线。
是指同一个账号这分这秒这不能同时登录,只要登录时间错开就允许两个相同的账号登录?
这样应该没什么意义,
如果是只要这个账号是登录上的状态,再用这账号登录就不能登,
这样的话用spring-security很好实现我这有个demo
http://download.csdn.net/detail/zuxianghuang/4295376
如果用户关闭了浏览器,该连接中断,session也会失效。
如果相同的用户登录,也会给予时时提醒。
可以参考DWR长连接和FLASH基于UDP协议的长连接。
你稍微改改就行了。ServletContext applicationContext = session.getServletContext();
HttpSession httpSession=(HttpSession)applicationContext.getAttribute(username);
if(httpSession!=null ){
applicationContext.removeAttribute(username);
try{
httpSession.invalidate();
}
catch(Exception e){
}
}
SessionManager.setSessionKeyValue("user", user);
applicationContext.setAttribute(username, SessionManager.getHttpRequest().getSession());