Cookie和Session


识别用户身份的两种技术:cookie和session。

1. Cookie

1.1 Cookie是什么


Cookie,类型为“小型文本文件”,是某些网站为了辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据(通常会进行加密),由客户端计算机暂时或者永久保存的信息。

Cookie特点:
cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

1.2 为什么使用Cookie


web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

使用了Cookie以后:
第一次登录后服务器返回一些cookie数据给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。



1.3 Cookie的产生


Cookie不是一定要使用的,因为浏览器可以禁用Cookie,同时服务器端也可以不Set-Cookie。

Cookie的产生时间:
客户端向服务器端发送一个请求,服务器端会向客户端发送一个cookie,然后浏览器来保存cookie。



1.4 Cookie的保存


Cookie有两种保存方式:

  1. 浏览器将Cookie保存在内存中
  2. 浏览器将Cookie保存在客户端的硬盘中

之后每次HTTP请求,浏览器都会将cookie发送给服务器端。



1.5 Cookie的生存周期


Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。


1.6 Cookie的缺陷


  1. 数量受到限制:一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的 Cookie 总数不能超过 20 个
  2. 安全性:通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。
  3. 浏览器可以禁用cookie:禁用Cookie后,也就无法享有Cookie带来的方便。



2. Session


2.1 Session是什么


会话:
用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称为一个会话。

Session:
在计算机中,尤其是在网络应用中,称为"会话控制"。Session 对象存储特定用户会话所需的属性及配置信息。



2.2 Session的产生


  1. 当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
  2. 服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让他进入到cookie里。服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session。再次访问时会带入会发送cookie给服务器,其中就包含sessionID。
  3. 服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他之前操控些、访问过哪里。



2.3 Session的生存周期


根据需求设定,一般来说,半小时。举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。



3. Cookie和Session的区别


两者区别:存储,安全性,对服务器的压力,跨域支持。

  1. Cookie 机制是通过检查客户身上的“通行证”来确定客户身份,Session 机制就是通过检查服务器上的“客户明细表”来确认客户身份。
  2. cookie 通常存储在客户端,由服务端给客户端设置 cookie 值,session 存储在服务端,在客户端可以看到一个 session id 用于前往服务器查询对应的信息,相比 cookie,标识用户身份的信息更加安全。
  3. cookie 只能存储 String 类型的对象,session 能够存储任意的 java 对象。
  4. Session比Cookie更具有安全性(Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击)。
  5. 单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie,Session是没有大小限制和服务器的内存大小有关。
  6. Session占用服务器性能,Session过多,增加服务器压力。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值