java web服务器通过实现httpsession来保存客户端的状态(jsessionid),也就是我们通常说的session。session是通过cookie机制来实现(网上说如果客户端禁用了cookie,则可以通过url重写来实现,一会再讨论。。)。
1、session的生成
在客户端第一次请求jsp页面,或servlet时生成,并向客户端写一个标识,即:jsessionid
由请求返回的http协议串可以看出:
请求:
POST /ibsm/LoginAction.do HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://192.168.3.197:8080/ibsm/
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 192.168.3.197:8080
Content-Length: 42
Connection: Keep-Alive
Cache-Control: no-cache
code=lyc&password=123&actType=ywgl&userId=
响应:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=1442A671BEEDA147A2756B7E083D3B7E; Path=/ibsm
Content-Type: text/html;charset=GBK
Content-Length: 436
Date: Mon, 01 Feb 2010 05:18:06 GMT
由响应的第三行可以看出生成的标识:JSESSIONID=1442A671BEEDA147A2756B7E083D3B7E
2、session的使用
在session生成以后,以后请求时,都会自动发送上边生成的标识。浏览器后台发送的请求报文如下:
GET /ibsm/ApplicationFrame.frame HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 192.168.3.197:8080
Connection: Keep-Alive
Cookie: JSESSIONID=1442A671BEEDA147A2756B7E083D3B7E
可以看到最后一行就是生成的jsessionid
3、session的失效与销毁
a、session超时,这个依赖与服务器端的设置(web.xml中的配置session超时时间),过了这个时间,session将被销毁。
b、关闭浏览器,此时session不一定被销毁,但是已经失效,因为session只能在一个窗口内使用,(不讨论经其他手段在多个窗口中获取同一个session)。session的销毁要到超时才能自动销毁。
c、退出应用。如果在退出应用的方法中调用了销毁session的方法,则session被销毁。否则不会销毁,等待超时自动销毁。
以上说法出自本人实践。
有一些疑问希望各同仁能帮我搞懂:
1、cookie的位置在哪儿?我找不到。网上有这种解释:
以persistent cookies和session cookie来区分两种cookie,说sessioncookie只存在内存中,不会持久化到硬盘。所以看不到,是不是这样的?如果是这样浏览器是如何来区分两种cookie的?
2、有文章说,如果客户端禁用cookie,则服务器会通过url重新来把jsessionid附加在url之后(***.jsp?jsessionid=*******),这又是如何实现的?能否给点资料看看。对此,还有一点疑问:我在机器上禁用了所有cookie之后,发现请求的报文没有改变,依然带着:
Cookie: JSESSIONID=1442A671BEEDA147A2756B7E083D3B7E
谁能给一个合理的解释。我用的浏览器是ie7。
分享到:
相关推荐
### Cookie机制和Session机制 #### 一、基本概念与背景 在现代Web应用中,为了实现用户认证、个性化设置等功能,通常需要在客户端与服务器之间维持一段时间内的状态信息。然而,HTTP协议本质上是无状态的,这意味...
#### 二、Cookie机制 ##### 1. Cookie的概念 Cookie是一种简单的机制,用于在客户端存储信息以便后续的请求中使用。它最初是由Netscape社区开发并在W3C的标准中得到采纳,几乎所有现代浏览器都支持Cookie。 #####...
【标题】:“session机制与cookie机制(来源于IT168)” 【描述】:这篇文章讨论了session和cookie在Web开发中的重要角色,解释了它们如何帮助维持用户状态,并且介绍了这两种机制的基本概念。 【标签】:“session...
在Web开发中,httpSession是服务器用于跟踪用户状态的一种机制。由于HTTP协议本身是无状态的,即服务器无法识别连续发送请求的同一客户端,因此引入了session来解决这个问题。 在Web应用程序中,当用户打开浏览器...
在Spring框架中,WebSocket是一种用于实现双向通信的技术,它可以提供实时、低延迟的数据传输,而HttpSession则是HTTP协议中用于跟踪用户会话的一种机制。在Spring 4版本中,我们经常需要结合WebSocket与HttpSession...
### Cookie与Session机制详解 #### 一、Cookie与Session的概念及区别 在Web开发中,为了保持用户的状态信息,通常会用到两种技术:Cookie...此外,还可以结合使用Cookie和Session来实现更复杂的功能,如自动登录等。
在Web开发中,Cookie和Session是两种非常重要的用户状态管理机制。它们被广泛用于跟踪用户的登录状态、个性化设置等,确保用户在不同页面之间切换时能够保持一致性体验。接下来,我们将详细探讨Cookie和Session的...
标签“源码”意味着该文章可能包含了对Cookie机制的源代码解析,帮助读者理解其内部工作流程。而“工具”可能指的是与Cookie管理相关的开发者工具或者辅助库,如浏览器的开发者工具或者某种编程框架提供的Cookie操作...
在IT行业中,尤其是在Web开发领域,Cookie和Session是两种非常重要的技术,用于管理用户状态和保持会话。这里我们深入探讨这两个概念以及它们在Java Web中的应用。 首先,Cookie是客户端存储的小型文本文件,由...
### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种...在实际开发过程中,合理利用 Cookie 和 Session 的特性,可以有效提升用户体验,同时确保应用程序的安全性和稳定性。
### 学习cookie的笔记和总结 #### 一、什么是Cookie? Cookie是一种小型的数据文件,由服务器发送到用户的浏览器,并存储在用户计算机上的一种机制。它主要用于保存用户的偏好设置、登录状态等信息,以便用户再次...
### Session的跟踪机制详解 #### 一、Session与Cookie的区别 ...通过对Session机制的深入理解,我们可以更好地设计和实现复杂的功能,比如购物车、用户认证等,从而提升Web应用的整体质量和性能。
虽然Cookie和Session主要依赖浏览器,但可以通过其他方式实现后台跟踪,如使用数据库或分布式缓存存储会话数据。这种方式通常用于跨域应用或移动应用,其中Session ID可以通过非HTTP方式传递(如WebSocket、API调用...
**Cookie机制** 1. **基本概念**:Cookie是由W3C组织提出并由Netscape社区发展的一种机制,它弥补了HTTP协议无状态的缺陷。服务器通过在客户端(浏览器)存储一小段文本信息(Cookie)来识别用户身份。当客户端再次...
服务器通过解析请求头中的Cookie来识别用户,实现会话跟踪。 **Session的基本操作** 1. **获取Session**:在Java Web开发中,通过`HttpServletRequest.getSession()`或`HttpServletRequest.getSession(true/false)...
为了实现这些功能,Web开发人员常使用两种主要的技术:Cookie与Session。 #### 二、Cookie技术 ##### 2.1 Cookie概述 **Cookie**是一种简单的文本文件,由服务器端创建并在客户端(通常是用户的浏览器)上进行...
**Cookie和Session**是两种常见的会话管理机制。Cookie是存储在客户端的小型数据块,常用于保持登录状态、个性化设置等。Servlet中,可以通过`response.addCookie()`添加Cookie,`request.getCookies()`获取Cookie。...
在Web应用中,Cookie常用于实现会话持久化,比如保存用户的登录状态。Java中,可以通过HttpServletResponse接口的addCookie方法添加Cookie,HttpServletRequest接口的getCookies方法获取Cookie。例如: ```java // ...