前言 本文旨在系统梳理总结下Cookie、Session和Token Cookie:存在客户端,用来解决客户端如何保存信息的问题 Session:存在服务端,来解决多用户问题,即每个客户端会对应一个session Token:无状态且支持跨域,有效防御CSRF,解决了session依赖于单个Web服务器的问题
一、COOKIE1、Cookie 简介HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性 当用户第一次访问服务器时,服务器可以在响应信息(response)中增加Set-Cookie响应头,将信息以Cookie为载体发送给浏览器 浏览器接收到服务器发送来的Cookie信息,就会将他保存在浏览器的缓冲区内 这样,当浏览器再次访问服务器时,就会将Cookie放在请求消息中,Web服务器就可以通过request中的用户信息来分辨此次请求是由哪个用户发起的
Cookie定义网站向访问电脑写入的小文本,大多数是4KB,记录用户ID、密码、停留时间等信息 Cookie作用Cookie分类2、Cookie 格式
Set-Cookie: "<name>=<value>[;domain=<domain_name>][;path=<some_path>][;expires=<date>][;<Max-Age>=<age>][;HttpOnly][;secure]"复制
其中name=value是必选项,其它都是可选项 Cookie的主要构成如下: Set-Cookie:HTTP响应头,服务端通过此HTTP头向客户端发送Cookie name:一个唯一确定的cookie名称。通常来讲cookie的名称不含分号、逗号和空格等字符,且不区分大小写 domain:cookie对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie信息。这个值可以包含子域(如:yq.aliyun.com),也可以不包含它(如:.aliyun.com,则对于aliyun.com的所有子域都有效)。如果缺省,值为Web服务器的域名 path:表示这个cookie影响到的路径,浏览器会根据这项配置,向指定域中匹配的路径发送cookie。如果值为/,则Web服务器上所有WWW资源均可读取该Cookie。借助path和domain,可以有效控制Cookie被访问的范围 expires:失效时间,表示cookie何时应该被删除的时间戳(即何时应该停止向服务器发送这个cookie)。如果不设置这个时间戳,浏览器会在页面关闭时即将删除所有cookie;不过也可以自己设置删除时间。这个值是GMT时间格式,如果客户端和服务器端时间不一致,使用expires就会存在偏差。 max-age:与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒),而不是一个固定的时间点。正常情况下,max-age的优先级高于expires。 HttpOnly:告知浏览器不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见。但在http请求张仍然会携带这个cookie。注意这个值虽然在脚本中不可获取,但仍然在浏览器安装目录中以文件形式存在。这项设置通常在服务器端设置,用来防御XSS secure:安全标志,指定后,只有在使用SSL链接时候才能发送到服务器,如果是HTTP链接则不会传递该信息。就算设置了secure 属性也并不代表他人不能看到你机器本地保存的 cookie 信息,所以不要把重要信息放cookie就对了
复制 |