request.getSession()和request.getSession(true)的区别

40
我理解 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)之间的区别!我已经明确说明了,我已经理解了..(true)..(false)之间的区别。

这个问题链接可能是重复的,它询问了..(true)..(false)之间的区别,而不是..(true)..()之间的区别。


4
三个回答都是正确的,相似且有用,但是@Jan是第一个回答的。 - Ali Khan
@KrutikJayswal 在你标记我的问题之前,你有没有仔细阅读我的问题?我明确说明我不是在询问..Session(true)和..Session(false)之间的区别!或者(含蓄地)在..Session()和..Session(false)之间的区别!我问的是..Session()和..Session(true)之间的区别!我得到了完全合理的答案!因此我将我的问题标记为“[已解决]”! - Ali Khan
@Sotiros 你为什么编辑了我的问题? - Ali Khan
7个回答

81

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

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

因此,这两种方法基本上没有区别。

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


1
如果当前会话为空,而我们又不希望创建新会话,则应立即注销。 - Arun
以上答案很容易理解。谢谢! - deadend

40

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


6

带有布尔参数的方法:

  request.getSession(true);

如果会话与请求没有关联,则返回新会话。

  request.getSession(false);

如果会话未与请求相关联,则返回null。

没有布尔参数的方法:

  request.getSession();

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


4

根据您提供的文档,它们都返回同一个东西,即 HttpSession 对象。

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

Session session = doGetSession(true);

3
一个主要的实际区别在于其使用方式: 在安全场景下,我们总是需要一个新的会话,这时应该使用request.getSession(true)
request.getSession(false): will return null if no session found.

1

request.getSession(true)request.getSession() 都是做同样的事情,但如果我们使用 request.getSession(false),它会在 session 对象还没有创建时返回 null


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接