request.getSession().getId()
和request.getRequestedSessionId()
之间有什么区别?他们俩都返回相同的东西,即会话ID吗?
由于
答案 0 :(得分:9)
request.getRequestedSessionId()
将返回客户端指定的会话ID(可能是在cookie中)。 request.getSession().getId()
将返回服务器的会话ID(如果会话不存在,request.getSession()
将创建它)。
重要的区别在于您不能依赖request.getRequestedSessionId()
返回的值,因为它可能无效。来自文档:
返回客户端指定的会话ID。这可能与此请求的当前有效会话的ID不同。如果客户端未指定会话ID,则此方法返回null。
答案 1 :(得分:-1)
HttpRequest.getRequestedSessionId()
是由调用者提供的会话ID,通常带有JESSIONID cookie,而HttpRequest.getGession().getId()
是服务器有效使用的ID。
对于正在进行的会话,JESSIONID cookie或值为HttpRequest.getRequestedSessionId()
允许服务器通过ID查找正在进行的会话。
对于新会话,您可能很想通过JESSIONID cookie提供一个值,即HttpRequest.getRequestedSessionId()
来设置服务器会话ID。这样可以很容易地将一个呼叫链与多个服务器相关联,这些服务器由来自客户浏览器的初始呼叫发起。但是,HttpRequest.getRequestedSessionId()的语义不允许这种链接。
实际上,JESSIONID cookie仅对服务器中已经存在并且先前已发送给客户端的会话有效。如果JESSIONID cookie引用了不存在的会话ID,则服务器会创建一个新会话,忽略 JESSIONID cookie的值。
通过阅读doGetSession(boolean)
类中org.apache.catalina.connector.Request
的源代码,您可以使自己相信以上内容。