1

我正在为我的 Web 应用程序使用 struts2。现在对于会话管理,我们实际上将用户 ID 保存在会话中(即 DB 标识符),并且在注销时我们从会话对象中删除此用户 ID。我们的会话对象(封装了用户 ID)正在实现会话感知接口,因此我想我们会在会话映射中自动获取所有与会话相关的信息。

我的基本怨恨是注销。我们只是从会话中删除用户 ID,而不是真正“使”会话“无效”,例如 session.invalidate()。

我是 struts2 的新手,甚至是我正在描述的这个产品原型。那么有人可以告诉我从会话中删除用户ID是否足够,如果不是,那么我可能会遇到什么样的安全隐患?我还应该在注销时执行 session.invalidate 吗?

4

2 回答 2

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文档

无效()

使此会话无效,然后解除绑定到它的任何对象。

因此,在 session.invalidate() 之后尝试访问存储在会话范围(如果有的话)中的变量时,您会遇到错误

于 2012-04-09T07:30:57.510 回答
0

在大多数情况下,从会话中删除用户 ID 应该足以告诉您的应用程序用户已退出。如果可以的话,我还建议删除所有其他会话变量并使会话 cookie 无效。如果您的代码使用其他会话变量而不首先检查是否设置了用户 ID,这将防止任何意外行为。

我通常将用户 ID 存储在会话中以指示用户已登录并告诉我用户是谁。如果未设置此值,则我将用户踢到登录页面。

于 2012-04-09T05:58:52.683 回答