【问题标题】:Difference between request.getSession().getId() and request.getSession(false)?request.getSession().getId() 和 request.getSession(false) 的区别?
【发布时间】:2012-12-07 19:48:55
【问题描述】:

就会话而言,这些调用实际上意味着什么?

System.out.println("print1: "+request.getSession().getId());
System.out.println("print2: "+request.getSession(false));

输出

print1: D94146A347D95563186EB7525726336B
print2: org.apache.catalina.session.StandardSessionFacade@d52411

【问题讨论】:

    标签: java javascript


    【解决方案1】:

    HttpSession session = request.getSession(); 在 service 方法中,我们请求会话,一切都会自动得到,比如创建 HttpSession 对象。无需生成唯一的会话 ID。无需创建新的 Cookie 对象。一切都在幕后自动发生。

    只要调用请求对象的getSession() 方法,容器就会创建一个新的会话对象,并生成一个唯一的会话ID 来维护会话。这个会话 id 被传输回响应对象,因此每当客户端发出任何请求时,它也应该将会话 id 与请求对象附加在一起,以便容器可以识别会话。

    request.getSession(false) :此方法将检查请求是否已存在会话。如果它存在,那么它将返回已经存在的 Session。如果此请求的 Session 不存在,则此方法将返回 NULL,这意味着此方法表示该请求以前没有 Session。

    【讨论】:

    • 但是如果我使用锚标签重定向到另一个页面,为什么它们的值会改变
    • 当你重定向然后你失去了会话所以每个脚本你必须在每个脚本的开头使用 session_start()
    • 是的,当我重定向到另一个页面时,我无法检索会话的值,并且上述两个值发生了变化
    • 因为你在重定向后丢失了会话所以请在每个脚本的开头使用 session_start()
    • 我在 window.navigate("del.jsp?+name="+delno); 的帮助下使用 javascript 重定向页面我无法在下一页收到值 od delno,我使用了 req.getParameter bt 没有希望
    【解决方案2】:

    总之-

    request.getSession().getId() - 返回一个字符串,其中包含分配给此会话的唯一标识符。标识符由 servlet 容器分配,并且依赖于实现。

    request.getSession(false) - 如果没有当前会话,则返回会话对象或 null。

    【讨论】:

      【解决方案3】:

      第一行将返回服务器上的“会话 ID”。 第二行将返回会话对象。那么 system.out 上会打印出request.getSession(false).toString();

      toString 的默认实现返回“对象 id”。 Object id 在会话方面与 session id 不同。会话可以在集群中进行序列化和复制,因此在每个 JVM 上集群的每个节点上,它可能具有自己的对象 ID(但应该具有相同的会话 ID)。

      这里解释了使用布尔值调用 get session: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getSession(boolean)

      【讨论】:

        【解决方案4】:
            request.getSession()
        

        此方法将检查现有会话;如果存在则返回,否则为请求创建一个新会话。

            request.getSession().getId();
        

        这将返回该会话的唯一标识符。

            request.getSession(false);
        

        此方法采用布尔值。此方法检查该用户(请求)是否存在现有会话;如果存在,则返回该会话,否则返回 null,即不会创建新会话。

        只是为会话添加更多信息。

            request.getSession(true);
        

        此方法检查该用户(请求)的现有当前会话,如果会话存在,它将返回该会话,否则为该用户创建新会话。

            request.getSession() works like request.getSession(true)
        

        参考: http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServletRequest.html#getSession%28boolean%29

        【讨论】:

        • 如果没有会话将返回什么,我们这样做:request.getSession(true).getId();
        【解决方案5】:
        request.getSession().getId()
        

        返回会话的 ID。

        Request.getsession(false) 返回已经存在的会话对象。如果会话不存在,它不会返回任何内容,即会返回 null 。而使用true 参数,它将创建一个新的会话对象并在不存在会话时返回它

        【讨论】:

          【解决方案6】:
          request.getSession().getId();
          

          将返回分配给已启动会话的唯一字符串 ID。 id 的生成是特定于供应商的,例如 apache、jboss 等。

          request.getSession(false);
          

          如果会话对象被关联,它将返回与特定请求关联的会话对象,如果它不是由服务器启动,它将返回 null。

          【讨论】:

            【解决方案7】:
            request.getSession().getId();
            

            这将返回现有会话的 ID。

            Request.getsession(false) 
            

            如果会话存在则返回,否则返回null。

            并且 Request.getsession(false) 表示:如果会话存在,则给我会话,否则不要创建新实例(因此返回 null)。

            【讨论】:

              【解决方案8】:
              request.getSession().getId();
              

              返回分配给此会话的唯一标识符。它的返回类型是字符串。

              request.getSession(false)
              

              如果已经存在则返回 HttpSession 对象,否则返回 null。

              【讨论】:

                猜你喜欢
                • 2015-09-07
                • 2016-12-12
                • 2011-08-15
                • 1970-01-01
                • 1970-01-01
                • 2015-06-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多