您的位置:首页 > 编程语言 > Java开发

【session】java.lang.IllegalStateException: getAttribute: Session already invalidated

2017-09-12 10:56 417 查看
1、问题定位:

在执行 

/**
* 设置用户到session
*
* @param session
* @param user
*/
public static void saveUserToSession(HttpSession session, User user) {
session.setAttribute(USER, user);
}

session.setAttribute(USER, user)方法时会报这个异常

2、原因:

从Session中获取属性值的时候,Session已经无效

失效原因:

(1)Session timeout;

(2)程序中调用了session.invalidate()方法(设置session无效)

发现在之前执行了session.invalidate()操作,重新设置session。如果想给session重新赋值,需要将session

失效。

// 设置session无效
session.invalidate();
// 获取用户名
UserEntity userEntity = new UserEntity();
userEntity.setId(userName);
UserUtil.saveUserToSession(session, userEntity);

解决办法:

重新获取session,赋值

UserUtil.saveUserToSession(request.getSession(), userEntity);
注意:

getSession()相当于getSession(true);

参数为true时,若存在会话,则返回该会话,否则新建一个会话;

参数为false时,如存在会话,则返回该会话,否则返回NULL;

3、场景

session.invalidate()方法一般用于在用户退出注销的时候,设置缓存失效。

如果同一个用户打开多个浏览器实例,此时处于同一个session会话中。如果其中一个浏览器实例执行了退出注销操作,另外的浏览器实例如果在执行录入的操作,则会异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐