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() 能否释放内存?