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中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用。
- 大小限制:cookie的大小限制在4KB左右,若要做大量存储显然不是理想的选择。
- 增加流量:cookie每次请求都会被自动添加到Request Header中,无形中增加了流量。cookie信息越大,对服务器请求的时间也越长。
session篇
在用户访问页面时,服务器可以为每个用户浏览器创建一个会话对象(session对象),并将sessionId保存到cookie上。注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,程序可以从用户的session中取出该用户的数据,为用户服务。
session和cookie的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
- cookie保存的数据不能超过4K,某些浏览器对cookie的名值对数量有限制。