请问控制web用户一个账户同一时间只能在一个地方登陆的问题?不能一个帐号同时登陆两次 我现在的处理方法是通过session 的 两个事件在一个application中的集合中记录,但是这样做有可能卡号,怕用户直接关浏览器而不是去按注销。请问还有没有其他办法??
解决方案 »
- 汉字自动转化为拼音
- 使用ServletOutputStream 输出文件好慢?
- 即将面试java web程序员,请教技巧经验~
- 关于request.setAttribute的问题
- 搞了servlet 2天,一直被这个错误卡死,The server encountered an internal error () that prevented it from fulfilling this request
- [求助]JSP分页的问题??
- 怎么保证数据的一直性?
- 请大家给一下JSP用连接池连库的例子!
- 面对这么多的JAVA编译器,JSP服务器,我不知道怎么办?!
- 没办法了在开一贴struts2+ajaxfileupload.js上传图片的问题。
- 如何将Oracle数据库中的声音取出放到jsp页面上
- ssh框架get方式部分乱码的问题
http://family168.com/tutorial/jsp/html/jsp-ch-08.html#jsp-ch-08-02
不过用户用F5之类的功能刷新整个页面后需要重新登陆,要完美无缺话是很难的。
String userid) {
HttpSession session = httpServletRequest.getSession();
ServletContext application = (ServletContext) session.getServletContext();
ArrayList users = (ArrayList) application.getAttribute("users");
HashMap ipUser = (HashMap) application.getAttribute("ipusers"); if (null != users && users.contains(userid)) {
if(ipUser!=null && ((String)ipUser.get(userid)).equals((String)httpServletRequest.getRemoteAddr())){
session.setAttribute("username",userid);
return true ;
}
else{
return false;
}
}
else {
session.setAttribute("username",userid);
if(users == null){
users = new ArrayList();
}
users.add(userid);
if(ipUser == null){
ipUser = new HashMap();
}
ipUser.put(userid,httpServletRequest.getRemoteAddr());
application.setAttribute("ipusers",ipUser);
application.setAttribute("users", users);
return true;
}
}
给ServletContext定义一个属性,例如"allUsers",
这个属性的值是一个map<String, String>
map的key是userId,map的value是用户登录时的sessionId
每当某个用户登录时,先从ServletContext中取出这个map(第一次要new),
遍历这个map,遇到相同userId时,取其对应的sessionId(old_sessionId),
通过request.getRequestSessionId()获得当前sessionId(new_sessionId),
看这两个sessionId是否相等,
不相等则添加当前用户的userId,sessionId到map,再set进ServletContext中
相等则提醒“此帐户已在其他地方登录”