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

Posted

技术标签:

【中文标题】request.getSession() 和 request.getSession(true) 的区别【英文标题】:Difference between request.getSession() and request.getSession(true) 【发布时间】:2015-09-07 22:39:09 【问题描述】:

我了解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)..() 的区别的重复问题

【问题讨论】:

所有 3 个答案都是正确、相似且有用的,但 @Jan 是第一个回答的。 Difference between request.getSession().getId() and request.getSession(false)?的可能重复 @KrutikJayswal 在标记我的问题之前你有没有阅读过我的问题?我明确表示我不是在询问 ..Session(true) 和 ..Session(false) 之间的区别!或(隐式)b/w ..Session() & ..Session(false)!我问了 ..Session() 和 ..Session(true) 之间的区别!我收到了完全合理的答案!我在上面标记了我的问题“[已解决]”!!! @Sotiros 你为什么编辑我的问题? 【参考方案1】:

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

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

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

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

【讨论】:

如果当前会话为空并且我们不希望这样,这将创建一个新会话。如果当前会话为空,请立即将他注销。 以上答案很容易理解。谢谢!【参考方案2】:

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

【讨论】:

【参考方案3】:

带有布尔参数的方法:

  request.getSession(true);

如果会话与请求无关,则返回新会话

  request.getSession(false);

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

没有布尔参数的方法:

  request.getSession();

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

【讨论】:

【参考方案4】:

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

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

Session session = doGetSession(true);

【讨论】:

【参考方案5】:

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

security scenario 中,我们总是需要一个新会话,我们应该使用request.getSession(true)

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

【讨论】:

【参考方案6】:

request.getSession(true)request.getSession() 都做同样的事情,但如果我们使用 request.getSession(false) 如果会话对象尚未创建,它将返回 null

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于request.getSession() 和 request.getSession(true) 的区别的主要内容,如果未能解决你的问题,请参考以下文章

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

转:request.getSession(true)和request.getSession(false)的区别

request.getSession().invalidate() 能否释放内存?

转于request.getSession(true/false/null)的区别

getsession方法

request.getSession().setAttribute("user", userName);啥意思???