request.getSession()和request.getSession(true)

时间:2015-06-22 12:58:43

标签: java jsp http session servlets

我理解request.getSession(true)request.getSession(false)之间的区别。但是request.getSession()& request.getSession(true)看起来非常相似!

两者"返回与此请求相关的当前会话",但区别在于:

request.getSession()

  

"或者如果请求没有会话,会创建一个"

request.getSession(true)

  

"如果没有当前会话,会返回新会话"

我不明白它们之间的区别,是不是(如果不存在)它们会创建一个新会话但​​第一个不会返回但是第二个会话呢?

来源:http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

修改

有人将我的问题标记/标记为重复,即使它不是。我会解释原因。

我明确要求request.getSession()& request.getSession(true)而不是request.getSession(true)和{}之间request.getSession(false)!我再次明确地说过,我已经理解了b / w ..(true)& ..(false)

问题linked可能是关于差异的重复问题b / w ..(true)& ..(false)而非..(true)& ..()

7 个答案:

答案 0 :(得分:60)

request.getSession()将返回当前会话。如果当前会话不存在,则将创建一个新会话

request.getSession(true)将返回当前会话。如果当前会话不存在,则将创建新会话

所以两种方法基本上没有区别。

如果当前会话存在,

request.getSession(false)将返回当前会话,然后它将 创建新会话

答案 1 :(得分:34)

request.getSession()只是一种方便的方法。它与request.getSession(true)完全相同。

答案 2 :(得分:5)

带布尔参数的方法:

  request.getSession(true);
如果会话与请求

无关,则

返回新会话

  request.getSession(false);
如果会话与请求无关,则

返回null。

没有布尔参数的方法:

  request.getSession();
如果会话与请求无关,则

返回新会话,如果会话与请求关联,则返回现有会话。它不会返回null。

答案 3 :(得分:4)

它们都返回相同的内容,如您链接的文档中所述;一个  HttpSession对象。

您还可以查看具体的实现(例如Tomcat),看看它实际在做什么:Request.java类。在这种情况下,基本上他们都会打电话:

Session session = doGetSession(true);

答案 4 :(得分:2)

一个主要的实际区别是它的用途:

security scenario我们总是需要新会话的地方,我们应该使用request.getSession(true)

request.getSession(false): will return null if no session found.

答案 5 :(得分:0)

request.getSession()或request.getSession(true)都将仅返回当前会话。如果当前会话不存在,那么它将创建一个新会话。

答案 6 :(得分:-1)

他们都返回相同的东西,但如果我们使用 false如果尚未创建会话对象,则返回null。