cookie和session

cookie篇

cookie是客户端本地存储的一种方式,常见的客户端本地存储的方式还有:session storage、local storage和indexDB。cookie有两种,一种储存在浏览器进程中,另一种储存在硬盘中。sessionId储存在第一种cookie中,所以当浏览器关闭就等于销毁了这个sessionId。

cookie的用途

cookie是一小段文本信息,伴随着用户请求在 Web 服务器和浏览器之间传递。cookie存储在计算机本地中,可以跨越一个域名下的多个网页,但不能跨越多个域名使用。保存用户登录信息、保存购物信息是cookie常见的用途。

cookie的原理

用户每次访问页面浏览器都先搜索本地是否有与这个域名相关联的cookie,有的话便添加到request header的Cookie字段中,与http请求一起发送到该站点。

cookie的内容

在浏览器开发者模式resource下可观察cookie,其内容有:name/value、domain、Path、Expires/Max-age、httpOnly、Secure。各名值对之间需有分号+空格隔开。其中httpOnly属性只能在服务器设置、httpOnly和secure是非名值对属性。例子如下:

document.cookie = "test=myCookie; domain=.google.com.hk; expires=Sat, 04 Nov 2017 16:00:00 GMT; secure"
cookie的设置

可以从客户端或者服务端设置cookie:

//客户端:
document.cookie = "name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]"
//服务端:
Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure][; HttpOnly]

每次设置不同的cookie名称就是新增cookie,修改cookie时可以修改原cookie的expries、secure属性,但不能修改domain、path属性。修改cookie时domain、path必须与原cookie保持一致,不然就会新增cookie。将expries设为一个过去的时间或将max-age设为0可以删除cookie。

cookie的缺点

安全性:由于cookie在HTTP中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用。

  1. 大小限制:cookie的大小限制在4KB左右,若要做大量存储显然不是理想的选择。
  2. 增加流量:cookie每次请求都会被自动添加到Request Header中,无形中增加了流量。cookie信息越大,对服务器请求的时间也越长。

session篇

在用户访问页面时,服务器可以为每个用户浏览器创建一个会话对象(session对象),并将sessionId保存到cookie上。注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,程序可以从用户的session中取出该用户的数据,为用户服务。

session和cookie的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
  4. cookie保存的数据不能超过4K,某些浏览器对cookie的名值对数量有限制。
参考文献
  1. https://segmentfault.com/a/1190000004743454#articleHeader9 (cookie)
  2. http://www.cnblogs.com/xdp-gacl/p/3855702.html (session)
  3. http://www.cnblogs.com/yunian/articles/5736066.html (cookie+session)

你可能感兴趣的:(cookie和session)