【问题标题】:Session in ServletsServlet 中的会话
【发布时间】:2016-02-14 18:39:06
【问题描述】:

我是 Servlet 和会话的新手。

我正在使用 Servlet 和 JSP 构建网站。我正在使用 Http 连接。

我正在使用会话,登录到我的网站会话后,当我一次又一次单击浏览器后退按钮时,我可以转到登录屏幕,然后再次单击浏览器前进选项,我可以进入网站而无需任何问题。

我的期望是当浏览器进入登录屏幕时,会话应该过期并且应该再次要求新密码。

有没有我可以用这个 http 连接做到这一点。

【问题讨论】:

    标签: java jsp session servlets session-cookies


    【解决方案1】:

    您可以在显示登录 servlet 中使会话无效:

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

    此解决方案适用于首次访问和回访。


    如果您只想在这不是第一次访问时使会话无效,您可以这样做:

    在登录 servlet 中

    HttpSession session = request.getSession(false);
    session.setAttribute("loggedUser", loggedUser);
    

    在显示登录 servlet 中

    HttpSession session = request.getSession(false);
    if (session != null) {
        if (session.getAttribute("loggedUser") != null) {
            session.invalidate();
        }
    }
    

    注意如果您使用标准登录过程,则可以在显示登录方法中使用代替

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

    【讨论】:

    • 无论如何我可以通过任何侦听器获取浏览器操作,以便我可以根据它进行检查
    • 我将解释我的功能要求,在登录期间我将创建一个会话。然后我将保持会话直到他注销。如果他使用后退选项(在浏览器中)并返回登录屏幕。我需要使会话无效(如你所建议)。但我无法区分浏览器返回登录屏幕或第一次查看登录屏幕。
    【解决方案2】:

    一些想法是:

    检查你的 login.page,在你做任何其他事情之前,if 你的mySession != null。您可以像 HttpSession mySession= request.getSession(false); 一样获取会话 如果您的会话不为空,则您的用户已经登录过一次。在这种情况下,您可以使会话无效mySession.invalidate();

    总体上应该是这样的:

       HttpSession mySession = request.getSession(false);
       if (mySession != null) 
       {
           mySession .invalidate();
       }
    

    另一个问题可能是浏览器正在浏览您的页面。

    可以在question 中找到如何在客户端浏览器中禁用此功能的想法。

    第三种方法是使用javascript。您可以在浏览器后面添加一个侦听器。 anser 的一个问题已经可用here

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2012-04-12
      • 1970-01-01
      • 2013-02-14
      相关资源
      最近更新 更多