25

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

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

输出

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

8 回答 8

19

HttpSession session = request.getSession();在服务方法中,我们请求会话,并且每件事都会自动获取,例如 HttpSession 对象的创建。无需生成唯一的会话 ID。无需创建新的 Cookie 对象。一切都在幕后自动发生。

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

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

于 2012-12-20T10:10:34.537 回答
16

简而言之——

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

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

于 2012-12-20T10:11:33.700 回答
5

第一行将返回服务器上的“会话 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 )

于 2012-12-20T10:12:18.603 回答
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

于 2014-01-07T06:39:32.767 回答
2
request.getSession().getId()

返回会话的 id。

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

于 2012-12-20T10:13:23.807 回答
1
request.getSession().getId();

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

request.getSession(false);

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

于 2012-12-20T10:26:59.750 回答
0
request.getSession().getId();

这将返回现有会话的 id。

Request.getsession(false) 

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

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

于 2012-12-20T10:43:00.693 回答
0
request.getSession().getId();

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

request.getSession(false)

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

于 2014-09-25T12:17:20.290 回答