java免登录打开ie_JavaWeb 如何设计用户多个浏览器登陆时只有最新的登陆的有效...

例如用户在A浏览器上登陆了,然后用手机打开B浏览器又登陆了,要让A浏览器上的用户退出(用户再次操作时提示登陆即可)

我的设计如下,这样设计有什么问题吗?因为有时候会报错

java.lang.IllegalStateException: getAttribute: Session already invalidated

我的代码:

//登陆方法

private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

//验证用户通过

....

//判断当前用户是否已经登陆,如果已经登陆,清掉之前的登陆信息(上次登陆失效);

if(isAlreadyLogin(user.getId(),request)){

Map sessionMap = (Map)request.getServletContext().getAttribute("sessionMap");

try {

sessionMap.get(user.getId()).removeAttribute("userID");**//这句报错**

sessionMap.get(user.getId()).removeAttribute("user");

} catch (Exception e) {

// TODO Java.lang.IllegalStateException: getAttribute: Session already invalidated

}

}

//登陆成功 ,设置session

request.getSession(true).setAttribute("user", user);

request.getSession(true).setAttribute("userID", user.getId());

addSessionToMap(user.getId(), request);

....

}

//退出方法

private void logOut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

String userId = (String)request.getSession().getAttribute("userID");

removeSessionToMap(userId,request);

request.getSession().removeAttribute("userID");

request.getSession().removeAttribute("user");

//返回信息

......

}

/**

* 判断用户是否已经登录

*/

private static boolean isAlreadyLogin(String userId,HttpServletRequest request){

ServletContext application = request.getServletContext();

Map sessionMap = (Map)application.getAttribute("sessionMap");

if(sessionMap==null||sessionMap.get(userId)==null){

return false;

}

return true;

}

private static void addSessionToMap(String userId,HttpServletRequest request){

ServletContext application = request.getServletContext();

Map sessionMap = (Map)application.getAttribute("sessionMap");

if(sessionMap==null){

sessionMap = new HashMap();

}

sessionMap.put(userId, request.getSession());

application.setAttribute("sessionMap", sessionMap);

}

private static void removeSessionToMap(String userId,HttpServletRequest request){

ServletContext application = request.getServletContext();

Map sessionMap = (Map)application.getAttribute("sessionMap");

if(sessionMap==null){

sessionMap = new HashMap();

}

sessionMap.remove(userId);

application.setAttribute("sessionMap", sessionMap);

}

请大牛指教,谢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值