在生活中,虽然周围的事情很多,但是有很多神奇的东西在帮助我们记录我们的生活轨迹,让我们的生活变得更加简单和快捷。比如,我们在使用网易博客登录时,发现可以通过设置"7天内免登录"来使网页记录自己的用户名和密码,使用浏览器时也可以打开自己刚关闭的网页,逛淘宝时,页面会推荐这几天自己正在注意的一些商品。。。这是为什么呢?
我们都已经学习过了Http协议,它具有无状态性和无连接性。无连接性限制每次连接至处理一个请求,服务器处理完客户端的请求,并接受到客户端的应答后,即断开连接。而无状态是指对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传。也意味着服务器无法从连接上跟踪会话,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。那么浏览器是如何记住我们的信息的呢?
为了记住我们的信息,需要跟踪我们的会话,即使用cookie和session。因为无法从网络连接上无法确认客户身份,所以,使用cookie机制相当于给客户端们颁发了一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。Cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
而session机制是将客户状态保存在服务器上,和客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上。注意,在上面是说,给客户端设置了cookie机制,这里将session机制设置在了服务器上。客户端浏览器再次访问时,只需要从改session中查找该客户的状态即可。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。(摘自网络)
但是这两种机制都不是无限期保存用户信息的,以网易博客7天内免登录来说,他将cookie的保存时间设置成了7天,而session有自动销毁机制(设置失效时间)如果一段时间内浏览器如果没有和服务器发生任何的交互,则session会定时销毁,默认20分钟。
以上是我在查阅了浏览器和服务器之间的会话机制后对cookie和session的简单了解,如果偏差,请各位不吝赐教。