我正在为我的网络应用程序使用struts2。现在,对于会话管理,我们实际上是将会话中的用户ID(即数据库标识符)保留,并且在注销时我们从会话对象中删除此用户ID。我们的会话对象(封装了用户ID)正在实现sessionaware接口,因此我猜我们会在会话映射中自动获取所有与会话相关的信息。
我的基本怨恨是退出。我们只是从会话中删除用户ID而不是真正“使会话无效”,例如session.invalidate()。
我是struts2的新手,甚至是我描述的这个产品原型。那么有人可以告诉我,如果从会话中删除用户ID是否足够,如果没有,那么我可能会遇到什么样的安全隐患?我应该在注销时进行session.invalidate吗?
答案 0 :(得分:0)
在大多数情况下,从会话中删除用户ID应该足以告诉您的应用程序用户已注销。如果可以,我还建议删除所有其他会话变量并使会话cookie无效。如果您的代码使用其他会话变量而未先检查是否已设置用户ID,则可以防止出现任何意外行为。
我通常在会话中存储用户ID,以指示用户已登录并告诉我该用户是谁。如果未设置此值,则我会将用户踢到登录页面。
答案 1 :(得分:0)
永远不要session.invalidate();
只为会话属性设置一个空值就足够了(也不需要删除该属性!)。你的支票应该是这样的:
if( is the attribute present is session)
if( is the value of attribute null) {
go to login page;
}
else {
go to welcome page;
}
}
else {
go to login page;
}
使用session.invalidate()
表示您告诉被盗用户没有有效会话,他是我们网站的诅咒:))
更新: 来自HTTPSession docs
无效()
使此会话无效,然后取消绑定绑定到它的任何对象。
因此,在session.invalidate()
之后尝试访问存储在会话范围中的变量(如果有的话)时会出现错误