isNew()如何判断会话是新会话还是已在使用?

如何在会话对象上调用isNew() ,检查会话是新会话还是已在使用?

我读到如果客户端尚未使用会话ID响应, isNew()将返回true。 但是这是什么意思 ? 请解释

我读到如果客户端尚未使用会话ID响应,isNew()将返回true。 但是这是什么意思 ?

考虑服务器当前正在处理请求。 会话处理有两种情况。

  • 在新会话场景中,服务器正在为用户/客户端创建新会话。 (客户端可能在请求中没有提供会话ID,或者它可能提供了服务器认为无效的会话ID。)servlet的应用程序代码决定是否需要会话(例如,因为它有一些想要的信息)存储在那里),并尝试使用“如果不存在”标志获取它。 servlet基础结构意识到没有当前会话,创建具有新会话ID的新会话,并将其保存在会话存储中。 在请求完成时,会话ID返回给客户端; 例如,作为cookie,或作为附加会话ID的URL。

  • 在现有会话场景中,客户端在请求中包含会话ID; 例如,作为会话cookie,或作为请求URL中的会话ID。 servlet基础结构识别此id,在其会话存储中查找它,并且(如果需要)重新创建包含从会话存储中检索的会话状态的HttpSession对象。 当servlet的应用程序代码尝试访问会话时,它会获取此HttpSession对象,而不是新对象。 然后,servlet在处理请求时可以使用和更新会话状态。

在第一个场景中,在会话对象上调用isNew()将返回true因为这是一个新会话。

在第二种情况下,在会话对象上调用isNew()将返回false因为这不是新会话。

如何在会话对象上调用isNew(),检查会话是新会话还是已在使用?

servlet基础结构知道发生了两个场景中的哪一个,因为它进行了会话创建或会话查找。 isNew()最明显的实现是在HttpSession对象中包含一个private boolean字段,并返回该字段的值作为isNew()的结果。 该字段将由servlet基础结构根据其获取会话对象的方式进行初始化。