【问题标题】:How to validate/invalidate sessions jsp/servlets?如何验证/无效会话 jsp/servlet?
【发布时间】:2013-01-04 21:13:50
【问题描述】:

当用户成功登录时,我在我的 servlet 中打开了会话:

HttpSession session = request.getSession(true);
session.setAttribute("name", name);

然后我在logout.jsp中写了终止会话:

<%session.invalidate();%>

要检查会话是否有效,我这样做:

HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");

但它不起作用,即使在 session.invalidate 之后,我也让会话有效。 有谁知道我在哪里做错了吗?

【问题讨论】:

  • 看起来已经回答了:stackoverflow.com/questions/4899500/…
  • 不,它不能解决我的问题,我说的是 jsp/servlets 而不是 jsf 标签。另一方面,我想知道我的代码有什么问题
  • 想法是一样的,你应该将请求重定向到一个新页面,而不是容器最终会使你的旧会话失效。

标签: jsp session servlets invalidation


【解决方案1】:

您应该调用 session.getSession(false) - 如果当前没有会话,则返回 null。

根据docs

HttpSession#getSession(boolean create) - create - true 必要时为此请求创建一个新会话;如果没有当前会话,则返回 null。

所以会话值检查的正确方法是 -

HttpSession session = request.getSession(false);
if(session!=null)
  session.setAttribute("name", name);

一旦你使会话无效 -

HttpSession session = request.getSession(false);
if(session!=null)
session.invalidate();

【讨论】:

  • 谢谢,所以 request.getSession(false) 如果会话处于活动状态,会返回什么?对不起,但我想真正理解这一点。
  • 它将返回您当前的会话。
  • 这是正确的答案。只需添加@AlbanoVito,您可能也对clearing the browser cache 感兴趣。
【解决方案2】:

验证会话

HttpSession session = request.getSession(true);
session.setAttribute("name", name);

要使其无效,您需要这样做

session.removeAttribute("name");
session.invalidate();

但是你需要记住一件事,对象可能会变得无效,但这并不意味着它会立即清理,即使在它的所有属性消失后使其无效之后,会话对象也可能会被重用,我得到了相同的用户 ID 和创建时间。

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 2014-09-29
    • 1970-01-01
    • 2012-07-26
    • 2011-11-20
    • 2019-05-15
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多