会话跟踪
1. 什么是会话
* 用户拨打10086,从服务台接通后会话开始;
* 用户发出话费查询请求,服务台响应。这是该会话中的一个请求;
* 用户发出套餐变更请求,服务台响应。这是该会话中的又一个请求;
* ...
* 用户挂断电话,会话结束。
* 用户拨打10086,从服务台接通后会话开始;
* 用户发出话费查询请求,服务台响应。这是该会话中的一个请求;
* 用户发出套餐变更请求,服务台响应。这是该会话中的又一个请求;
* ...
* 用户挂断电话,会话结束。
2. 会话的特性
* 一个会话中可能包含多个请求;
* 一个会话中发出请求的用户是唯一的;
* 一个会话中可能包含多个请求;
* 一个会话中发出请求的用户是唯一的;
3. JavaWeb会话
* 从用户打开本站第一个页面开始,会话也开始了;
* 用户会发出0~n个请求;
* 用户关闭浏览器会话结束了。
* 从用户打开本站第一个页面开始,会话也开始了;
* 用户会发出0~n个请求;
* 用户关闭浏览器会话结束了。
4. 什么是会话跟踪技术
HTTP是无状态协议,也就是没有记忆力的协议,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用户身份。这说明需要使用额外的手段来跟踪会话!
* 在一个会话中共享数据即会话跟踪技术---可以用cookies解决是一种解决方案
HTTP是无状态协议,也就是没有记忆力的协议,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用户身份。这说明需要使用额外的手段来跟踪会话!
* 在一个会话中共享数据即会话跟踪技术---可以用cookies解决是一种解决方案
一个用户对服务器的多次访问,并且是连续的,把上一次请求的数据在下一个请求还可以访问到。
Cookie
1. 什么是Cookie---压力在客户端,cookie不能跨浏览器
* Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据。
* 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来。
* 当客户端再次请求同一服务器时,客户端会在请求头中添加该服务器保存的Cookie,发送给服务器。
* Cookie就是服务器保存在客户端的数据!
* Cookie就是一个键值对!!!
* 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来。
* 当客户端再次请求同一服务器时,客户端会在请求头中添加该服务器保存的Cookie,发送给服务器。
* Cookie就是服务器保存在客户端的数据!
* Cookie就是一个键值对!!!
2. Cookie规范
* Cookie通过请求头和响应头在服务器与客户端之间传输;
* Cookie大小限制在4KB之内;
* 一台服务器在一个客户端最多保存20个Cookie;
* 一个浏览器最多可以保存300个Cookie;
* Cookie通过请求头和响应头在服务器与客户端之间传输;
* Cookie大小限制在4KB之内;
* 一台服务器在一个客户端最多保存20个Cookie;
* 一个浏览器最多可以保存300个Cookie;
虽然Cookie规范是如此,但在今天,浏览器厂商的竞争异常激烈,所以多少会超出Cookie规则的限制。但也不会超出过多!
3. Cookie的maxAge(生命)
当服务器创建Cookie对象后,可以调用setMaxAge()方法设置Cookie的最大生命。
* maxAge > 0:表示Cookie在客户端硬盘上保存的最大时间,单位为秒;
* maxAge < 0:表示Cookie不会被浏览器保存到硬盘上,而只在浏览器内存中存活,一旦客户端关闭浏览器在,那么Cookie就消失;
* maxAge == 0:表示删除Cookie,例如客户端硬盘已经存在名为abc的Cookie,如果服务器再向客户端发送名为abc,并且maxAge为0的Cookie,那么表示删除客户端上的名为abc的Cookie。
当服务器创建Cookie对象后,可以调用setMaxAge()方法设置Cookie的最大生命。
* maxAge > 0:表示Cookie在客户端硬盘上保存的最大时间,单位为秒;
* maxAge < 0:表示Cookie不会被浏览器保存到硬盘上,而只在浏览器内存中存活,一旦客户端关闭浏览器在,那么Cookie就消失;
* maxAge == 0:表示删除Cookie,例如客户端硬盘已经存在名为abc的Cookie,如果服务器再向客户端发送名为abc,并且maxAge为0的Cookie,那么表示删除客户端上的名为abc的Cookie。
4.Cookie的路径
浏览器在访问BServlet时,是否要带上AServlet保存的Cookie呢?这要看Cookie的path了。如何访问的Cookies没有设置路径,那么path就是当前所在的路径。
Session
1. session的原理
session是依赖Cookie实现的。
session是服务器端对象
当用户第一次使用session时(表示第一次请求服务器),服务器会创建session,并创建一个Cookie,在Cookie中保存了session的id,发送给客户端。这样客户端就有了自己session的id了。但这个Cookie只在浏览器内存中存在,也就是说,在关闭浏览器窗口后,Cookie就会丢失,也就丢失了sessionId。
当用户第二次访问服务器时,会在请求中把保存了sessionId的Cookie发送给服务器,服务器通过sessionId查找session对象,然后给使用。也就是说,只要浏览器容器不关闭,无论访问服务器多少次,使用的都是同一个session对象。这样也就可以让多个请求共享同一个session了。
当用户关闭了浏览器窗口后,再打开浏览器访问服务器,这时请求中没有了sessionId,那么服务器会创建一个session,再把sessionId通过Cookie保存到浏览器中,也是一个新的会话开始了。原来的session会因为长时间无法访问而失效。
当用户打开某个服务器页面长时间没动作时,这样session会超时失效,当用户再有活动时,服务器通过用户提供的sessionId已经找不到session对象了,那么服务器还是会创建一个新的session对象,再把新的sessionId保存到客户端。这也是一个新的会话开始了。
session是依赖Cookie实现的。
session是服务器端对象
当用户第一次使用session时(表示第一次请求服务器),服务器会创建session,并创建一个Cookie,在Cookie中保存了session的id,发送给客户端。这样客户端就有了自己session的id了。但这个Cookie只在浏览器内存中存在,也就是说,在关闭浏览器窗口后,Cookie就会丢失,也就丢失了sessionId。
当用户第二次访问服务器时,会在请求中把保存了sessionId的Cookie发送给服务器,服务器通过sessionId查找session对象,然后给使用。也就是说,只要浏览器容器不关闭,无论访问服务器多少次,使用的都是同一个session对象。这样也就可以让多个请求共享同一个session了。
当用户关闭了浏览器窗口后,再打开浏览器访问服务器,这时请求中没有了sessionId,那么服务器会创建一个session,再把sessionId通过Cookie保存到浏览器中,也是一个新的会话开始了。原来的session会因为长时间无法访问而失效。
当用户打开某个服务器页面长时间没动作时,这样session会超时失效,当用户再有活动时,服务器通过用户提供的sessionId已经找不到session对象了,那么服务器还是会创建一个新的session对象,再把新的sessionId保存到客户端。这也是一个新的会话开始了。
设置session超时时间
web.xml文件中配置如下:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
web.xml文件中配置如下:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2. session与浏览器
session对象是保存在服务器端的,而sessionId是通过Cookie保存在客户端的。
因为Cookie不能在多个浏览器中共享,所以session也不能在多个浏览器中共享。也就是说,使用IE登录后,再使用FireFox访问服务器还是没有登录的状态。
session对象是保存在服务器端的,而sessionId是通过Cookie保存在客户端的。
因为Cookie不能在多个浏览器中共享,所以session也不能在多个浏览器中共享。也就是说,使用IE登录后,再使用FireFox访问服务器还是没有登录的状态。
而且同时打开多个相同浏览器的窗口,是在使用同一session。如果你使用的是老浏览器,例如IE6,那么就会每个窗口一个session。