1. 出现背景
在上一篇博客中提到cookie的出现背景是为了解决HTTP协议的无状态性而出现的技术,在这里session也是一样的。我们希望实现web的动态交互,但是基于的HTTP协议却是无状态的,这里就出现了一个难题:一个无状态的协议怎样才能关联两次连续的请求呢?也就是说无状态的协议怎样才能满足有状态的需求呢?此时有状态是必然趋势而协议的无状态性也是木已成舟,因此我们需要一些方案来解决这个矛盾,来保持HTTP连接状态,于是出现了cookie和session。
2.session工作原理
最上面提到session的作用就是:将用户数据保存在服务器端,使得用户能够访问到自己的数据而不会使得许多用户的数据混乱。那么如何实现呢,下面就来介绍一些session的工作原理。
客户端(图中的张三,李四)和服务器连接上之后在服务器端开辟一块属于自己的内存空间,空间建立成功之后马上断开和服务器的联系.这样子不同的客户端就在服务器中有了只属于自己的一块空间;
下面马上出现了另外一个问题:如何客户端在下次访问的时候如何找到属于自己的那块内存空间?为了解决这个问题就引入了一个sessionid(id我们都知道,总是做为我们的一个唯一性标识而出现的).sessionid就是作为一个每个客户端的唯一标识而存在在服务器端和客户端的.也就是说在客户端和服务器端都存在一个sessionid.这样子通过sessionid就交互了。
其实客户端的sessionid如果存放在cookie中就可能出现另外一个问题,在客户端禁用了cookies就得不到sessionid,这样子就完不成和服务器端的通信了。这个问题也有对应的解决方法即是url重写;这里先不说呢。
唠叨完这些就会发现其实session可以简单的理解为是客户端(浏览器)在服务器上为自己开辟的一块空间。
3.session的特点
1.服务器的一块内存,保存信息到服务器端。
2.和客户端窗口对应
3.客户端和服务器都有对应的sessionid
4.session和cookies的区别
对于两者之间的联系在标题中其实已经给出了,两个都是保存会话的技术。那么两者之间的区别呢?
1.Cookie是把用户的数据写给用户的浏览器。将数据保存在客户端
2.Session技术把用户的数据写到用户独占的session中。将数据保存在服务器端。
3.Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
5.总结
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。