cookie和session

189 阅读5分钟

无状态的HTTP协议

协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规则。超文本传输协议(HTTP)是一种通信协议,它允许超文本标记语言(HTML)文档从web服务器传送到客户端浏览器 HTTP协议是无状态的协议,一旦数据交换完毕,客户端与服务器端的链接就会关闭,再次交换数据需要建立新的链接。这意味着服务器无法从连接上跟踪会话

会话(Session)跟踪

会话:指用户登陆网站后的一系列动作,比如浏览商品添加到购物车购买。 会话跟踪是web程序中常用到的技术,用来跟踪用户的整个会话。 常用的会话跟踪技术是Cookie和Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份

Cookie

Cookie实际上是一小段文本信息,客户端请求服务器,若服务器需要记录该用户状态,就使用response向客户端浏览器发送一个Cookie,客户端会把Cookie保存起来。 当浏览器再次请求该网站时,浏览器把请求的网址两桶该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户按状态。服务器还可以根据需求来修改Cookie的内容

会话Cookie和持久Cookie

若不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie消失。这种生命期为浏览器会话期的Cookie成为会话Cookie。会话Cookie一般不存在硬盘而是保存在内存中,当然这种行为并不是规范规定的。 若设置了过期时间,浏览器就把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie仍然有效知道超过设定的过期时间。存储在硬盘上的Cookie可以在浏览器的不同进程间共享。这种称为持久Cookie。 Cookie具有不可跨域名性 就是说,浏览器访问百度不会带上谷歌的Cookie

Session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找客户状态就可以了。 每个用户访问服务器都会建立一个Session,那么服务器如何标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

两个问题

1.什么东西可以让每次请求都把SessionId自动带到服务器呢? 是Cookie,若想为用户建立一次会话,可以在用户授权成功时给他一个唯一的Session。当一个用户提交了表单,浏览器会将用户的SessionId自动附加在HTTP头信息中,当服务器处理完这个表单,会将结果返回给SessionId对应的客户 存储需要的信息服务器通过SesisonId作为key,读到对应的value,就达到了保持会话信息的目的。

session的创建

当程序需要为某个客户端请求创建一个session时,服务器首先检查这个客户端请求中是否已包含了SessionId,若已包含,则说明以前已经为此客户端创建过session,服务器就按照这个sessionId把这个session检索出来使用(检索不到会新建一个)。若客户端请求中不包含SessionId,则会为此客户端创建一个session并且生成一个与此session相关联的sessionId,这个sessionId将在本次响应中返回给客户端保存

禁用cookie

若客户端禁用cookie,通常有两种方式实现session而不依赖cookie 1,URL重写:就是把sessionId直接附加在URL路径后面 2,表单隐藏字段:就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时嫩个够把sessionId穿回给服务器

session共享

对于多网站(同一父域,不同子域)单服务器。我们需要解决来自不同网站之间的SessionId的共享。由于域名不同,而SessionId又分别存储在各自的Cookie中,因此服务器就会认为对于两个字站点的访问,是来自不同的会话。解决方法是通过修改cookie的域名为父域名来达到cookie共享的目的,从而实现sessionId的共享。弊端是,子站的cookie信息也同时被共享了

总结

  1. cookie数据存放在客户的浏览器上,session数据存放在服务器上
  2. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  3. session会在一定时间内保存到服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能,应当使用cookie
  4. 单个cookie保存的数据不超过4k,很多浏览器限制一个站点最多保存20个cookie
  5. 可考虑将登陆信息等重要信息存放为session,其他信息若需要保留,存放在cookie