1、为何会有cookiejavascript
首先要明白Cookie是如何产生的,是服务器端生成可以标识用户的一串数据或文本,保存在客户端,再次访问时便会携带Cookie信息,方便进行用户认证或标识。java
从服务器端,发送cookie给客户端,是对应的Set-Cookie。包括了对应的cookie的名称,值,以及各个属性。从客户端发送cookie给服务器的时候,是不发送cookie的各个属性的,而只是发送对应的名称和值。nginx
除了服务器能够设置cookie值以外,还能够经过浏览器内置的一些脚本,好比javascript,去设置对应的cookie,对应实现是操做js中的document.cookie。web
2、cookie的分类浏览器
分为两种:会话cookie和持久cookie。会话cookie是仅在本次浏览器打开时有效,关闭浏览器,cookie便失效。持久cookie是有有效期的,过时了才会失效。服务器
区分这两种cookie的方法,若是设置了Discard参数或者没有设置Expires或者Max-Age来讲明过时时间的,就是一个会话cookie。微信
3、cookie的属性cookie
一、cookie的域属性session
该属性主要是为了告诉浏览器将cookie发给哪一个站点的,若是不设置这个属性,那么cookie不属于任一站点,浏览器能够将该cookie发给全部站点,每一个站点都能获取到用户信息,这是有违设计初衷,而且会泄露用户信息的。网站
可是,实际使用的时候,依然有web服务器的cookie机制的设计不够完善,好比若是a网站没有设计到该属性,就会出现如下现象,我访问完a网站保存了用户名和密码,或者发表了一篇博客时填写了标题titleXXX,在访问b网站时自动填充了个人用户名和密码,或者在提交文本时自动出现提示下拉框,内容是titleXXX。
二、cookie的路径属性
能够容许用户将cookie与一个站点的部分web站点关联起来,好比,若是设置了该属性,name只有在cookie中设定的路径下,才可以访问到该cookie,有效的进行了控制。
三、过时以前若是修改了密码,cookie会有什么变化?(引用V2EE论坛上别人的观点)
cookie里面放的是signature 也就是签名,可是这个签名是属于token机制的,它与时间戳等其余相关,修改完密码以后原来signiture就会失效,换成了新的token和新的signature。
用户的信息确实要验证,可是如今的验证部分要经过比对,可是大部分的请求采用很快的的方法了,经过memcache类型的数据,在nginx端就直接将要验证的信息做为索引去取cache中的内容,可是若是用户关键信息变了的话,若是仍是这样的请求,会将response状态转为从新登陆,而后memcache中的该用户信息就会换为新的,你去试试微信,大象笔记,利用heartbeat保持session,若是用户的签名发生改变,就会让全部的heartbeat的客户端所有从新登陆,cookie失效。
------------待更新--------------