我理解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)
& ..()
答案 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。