2012-02-27 32 views
8

如何对会话对象调用isNew(),检查会议是一个新的或已在使用?isNew()是如何判断会话是新的还是正在使用?

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

+0

你的问题涉及什么课? – 2012-02-27 11:29:29

+0

@安德鲁Logvinov看到编辑 – 2012-02-27 11:31:16

+0

阅读理解会话是如何工作的:http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading – BalusC 2012-02-27 11:37:17

回答

20

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

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

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

  • 在现有会话的情况下,客户端已经包括在所述请求的会话ID;例如作为会话cookie,或作为请求URL中的会话ID。 servlet基础结构识别此ID,在其会话存储中查找它(并在必要时),重新创建包含从会话存储检索到的会话状态的对象HttpSession。当servlet的应用程序代码尝试访问会话时,它会获得此对象,而不是新对象。会话状态可以在servlet处理请求时使用和更新。

在第一种情况下,呼叫会话对象isNew()将返回true因为这是一个新的会话。

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

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

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

+2

我没有了解你答案的一个部分。你能否说清楚一点? – 2012-02-27 11:44:40

+3

我完全理解你答案的每一部分,谢谢你写下来。 – user1884155 2016-06-29 21:18:32

相关问题