Session的理解
一、 个人误区
一开始很傻的把Session的会话与用户的登录与退出弄混淆了,实在很傻!Session的会话指的是当你打开浏览器,请求一个应用服务器时开始,直到与这个应用服务器断开连接(如关闭浏览器等)为止的一系列动作。这与用户登录完全没有关系,被弄混淆个人觉得是Session最普遍的用法就是用来控制用户的登录/退出事件的。
二、 Session的理解
1、
Session的机制、创建以及保存
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识 - 称为 Session id,如果已包含一个Session id则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个 Session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含Session
id,则为此客户端创建一个Session并且生 成一个与此Session相关联的Session id,Session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 Session id将被在本次响应中返回给客户端保存(客户端一般使用Cookie保存)。
例如:当你打开浏览器时,然后输入一个地址,这个地址其实对应的是一个服务器,当你的请求被服务器响应之后,如上所说服务器首先会根据你发送的请求是否包含一个Session标识(Session-Id),如果有则不新建Session,但若是没有则新建一个Session,并将该Session的ID返回给客户端(浏览器),客户端就将该Session-Id保存到一个Cookie中(一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID=
ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是 JSESSIONID),然后每次客户端请求一个新的页面时就将该Cookie通过某种机制发送给服务器端,服务器端就知道Session已经创建了,从而不需要再新建一个Session。
2、
Session的销毁
Session的销毁并不是在浏览器窗口被关闭时。对于Session的销毁除非程序显示的告诉服务器销毁Session,否则服务器不会主动销毁一个Session。
然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的Session。
Session被销毁的另一个原因就是为Session设置了失效时间,即当距离客户端上一次使用Session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把Session销毁以节省存储空间。此时当用户再次访问时,如刷新页面、再次访问等,服务器会重新创建一个Session,并生成一个新的ID。
说明(实验得出,IE8,Google):当你访问一个服务器之后,关闭窗口(所有浏览器窗口,如IE,那就关闭所有IE窗口,一个不留),然后再打开访问同样的服务器,这时虽然上一个Session可能未被销毁,但是服务器找不到,因此就会再新建一个Session,这时会有两个Session。但是如果你未完全关不窗口的话,那么就会使用之前的Session。原因是Session-Id是保存在一个Cookie中的(测试时该Cookie名为JSESSIONID),而这个Cookie的生命周期为浏览器关闭,即浏览器关闭(完全关闭)则该Cookie就会被删除,因此服务器无法通过这个Cookie找到Session-Id,这时服务器就会认为没有Session存在,就会新建一个Session。同时这个Session的Id会覆盖之前的Session-Id,因为使用的是同一个Cookie,而Cookie会覆盖。
自己可以做试验!在IE和Google中都是可以查看Cookie的!
个人理解,有错欢迎指出!
分享到:
相关推荐
drools session理解.doc
session理解临床试验的项目管理医疗器械临床试验管理与统计分析培训班讲义PPT学习教案.pptx
对于session很多人都听说过,但具体这个概念怎么理解,这里有个说法。
深入理解Servlet/JSP之“Cookie和Session原理”
session及其跟踪机制cookies,URlRwriting Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题
详细描述了session的原理及作用,session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
本课程系统地讲解了SESSION这个知识点,主要讲解了Session的...学习本课程可以理解Session机制,javax.servlet.http.HttpSession及HttpSession常见问题。免费试听地址:http://www.itcast.net/portal/courses/unit/124
对session和cookie的深刻理解
cookie、session、token理解.md
深入理解ServletJSP之“Cookie和Session原理”很详细 深入理解ServletJSP之“Cookie和Session原理”很详细 深入理解ServletJSP之“Cookie和Session原理”很详细 深入理解ServletJSP之“Cookie和Session原理”很...
目录: 一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结
最通俗的关于Cookie, Session,Token和JWT的相关笔记和理解。在中章笔记中主要介绍一下Session。 上章:主要介绍背景和Cookie 中章:主要介绍一下Session并总结一下Cookie和Session。 下章:主要介绍Token的相关定义...
java中使用session购物车的简单例子,本代码是基于servlet的简单实例,帮助理解session原理。
本文详细的描述了java开发中Session和Cookie的区别,更加有利于读者的理解
NULL 博文链接:https://zhangxing119.iteye.com/blog/1114237
对request、session application等作用域的通俗易懂解释
使用session实现的简单购物车,没有使用数据库,便于初学者理解session功能。
详细的说明了session的用途和用法,做了两个小例子,一个是购物车,一个是登陆,适合初学者练习和理解
基于PHP两种会话机制,Session和Cookie的相关实例,帮助大家更好理解PHP会话机制。如有错误,请提出