以下是迄今为止我知道的tomcat如何保持会话的两种方式。
- 在 URL 中添加“JSESSIONID=xxxxxxxxxxxxxxx”之类的参数,每次向服务器端发送请求时,tomcat 都会查询带有“xxxxx”的会话映射
- 在 cookie 中添加一个字段,例如“JSESSIONID=xxxxxxxxxxxxxxx”。
因此,据我了解,如果我们在浏览器中禁用 Cookie,并使用不带“JSESSIONID=xxxxxxxxxxxxxxx”之类的参数的 URL 访问我们的页面。会话 ID 将被更改。用jsp写一段代码
<%
out.println(request.getSession().getId());
%>
每当我们访问这个 jsp 时,会话 id 都会改变。但事实是 sessionId 永远不会改变。
我观察了浏览器中的 cookie,我确实禁用了 cookie。当我第一次访问该页面时,请求和响应如下:
Request URL:http://localhost:8080/examples/testt.jsp
Request Method:GET
Status Code:200 OK
----------
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
-------
Response Headersview source
Content-Length:342
Content-Type:text/html;charset=ISO-8859-1
Date:Sat, 05 May 2012 03:01:32 GMT
Server:Apache-Coyote/1.1
Set-Cookie:JSESSIONID=6C71760FD3B85C4696CD8E6204574A06; Path=/examples
当我第二次访问该页面时,请求和响应如下:
Request URL:http://localhost:8080/examples/testt.jsp
Request Method:GET
Status Code:200 OK
--------
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=6C71760FD3B85C4696CD8E6204574A06
Host:localhost:8080
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
--------
Response Headersview source
Content-Length:342
Content-Type:text/html;charset=ISO-8859-1
Date:Sat, 05 May 2012 03:03:19 GMT
Server:Apache-Coyote/1.1
有人可以告诉我当 cookie 被禁用并且 URL 不包含“JSESSIONID=xxxxxxxxxxxxxxx”时,tomcat 如何保持会话。
非常感谢。
我在 Chrome 中禁用 cookie 时犯了一个错误,在上述测试中我并没有真正禁用 cookie。