我对javax.servlet.http.HttpSession的文件感到困惑 它说:
会话用于维护多个州的状态和用户身份 页面请求。可以使用cookie或者来维护会话 通过URL重写。
现在,cookie和URL重写都由服务器中的应用程序代码(即我们的代码)处理。
然后它说明会话何时被视为new
:
服务器认为会话是新的,直到它被加入 客户端。在客户端加入会话之前,使用isNew方法 返回true。值true表示以下三种情况之一:
1.客户尚未了解会议情况 2.会议尚未开始 3.客户选择不加入会话。如果客户端仅支持cookie并选择拒绝任何cookie,则会发生这种情况 由服务器发送。如果服务器支持URL重写,则为这种情况 不会经常发生。
我不清楚何时考虑/意味着client has joined the session
。
我的意思是如果我不使用来自我的网络应用程序(或URL重写)的cookie,我有以下内容:
在步骤3中,session.isNew()
会返回true还是false?从文件中我不清楚
它会返回错误(即会话不是新的),我将不得不致电session.invalidate()
以创建新会话吗?
这让我更加困惑的原因是因为我正在调试一段代码,其中客户端是HTTP应用程序而不是Web浏览器,我在步骤3中看到session.isNew()
不会返回true
,尽管那里服务器代码中没有cookie或URL重写。
所以我无法弄清楚引擎盖下会发生什么
任何有助于理解这一点的信息?
答案 0 :(得分:3)
Client has joined the session
表示客户端发出后续请求并包含会话ID,您的网络服务器可以识别该ID。如果启用了Cookie,则jsessionid
将通过Cookie传递,否则 - 应包含在网址中 - 如此http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1
。
来自Core Tag Library的JSP c:url
将为您处理URL重写。
在B2B通信的情况下,您必须自己获取会话ID并手动将其包含在后续请求中。
示例:强>
session id
session id
<强>更新强>
考虑阅读一篇好文章 - "Web Based Session Management: Best practices in managing HTTP-based client sessions."这是对如何模拟HTTP会话以及与Java无关的概述。