1、概念:在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间。具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
2、工作原理:
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,php从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
3、特点:
(1)不是线程安全的,应该避免多个线程共享同一个Session实例
(2)Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源
(3)Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。
4、使用方法:Session 是 用于保持状态的基于 web服务的方法。Session 允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象,常用于执行以下操作:
(1)存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览 Web应用程序时需要的其它信息。
(2)存储只需要在页重新加载过程中或按功能分组的一组页之间保持其状态的对象。
(3)Session 的作用就是它在 Web服务器上保持用户的状态信息供在任何时间从任何页访问。因为浏览器不需要存储任何这种信息,所以可以使用任何浏览器,即使是像 PDA 或手机这样的浏览器设备。
5、工作流程:
(1)客户端访问服务器,服务器调用request.getSession()方法,产生session对象,用于跟踪用户的状态。
(2)同时,给session对象分配一个唯一标识sessionId。为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。
(3)产生响应时,将sessionId以cookie方式发送给客户端,存放在客户端浏览器的缓存中。
(4)当客户端再次请求服务器,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态。
6、session周期:开始:建立链接,服务器分配一个session id
结束:Session 数据过期或者失效
7、与cookie的异同:
相同点:(1)它们都是为了解决HTTP 无状态特性带来的问题解决方案
(2)都需要存储数据
(3)都需要往服务器端发送数据
不同点:(1)session数据存储在云端,而Cookie数据存储在客户端
(2)各种浏览器对cookie的大小和总数都是有限制的,而session理论上大小和总数都是无限的
(3)因数据存储在客户端,因此当用户执行诸如访问恶意网站的操作时,数据可能泄露,而session数据相对安全
(4)session机制的数据保存需要消耗服务器资源,特别是当网站处于大负载高并发的情况下会对服务器性能有较大的影响。因此,非必要数据建议不要放在session中