Cookie-Session
设置 Cookie
服务器通过返回 Set-Cookie 的 Header 在浏览器设置 Cookie,可以设置 domain,path,expires,secure,httponly 等参数。
参数 | 解释 |
---|---|
domain | 域名,命中时才让浏览器发送 cookie |
path | 路径,上面的域名下命中这个路径才让浏览器发送 cookie |
expires | 过期时间(相对于客户端时间)UTCString,如,Wed, 21 Oct 2015 07:28:00 GMT |
secure | 只允许 https 传输 cookie,一般网站是 https,会自动启用这个参数 |
httponly | 不允许 js 读取这个 cookie |
把 cookie 设置在 example.com
下,那么访问 a.example.com
,b.example.com
都会自动携带。
把 cookie 设置在 a.example.com
,那么访问 a.example.com
会自动携带。 访问 b.example.com
不会自动携带。
所以说 cookie 的同源策略比 ajax 的宽松。
删除 Cookie
服务器还是返回 Set-Cookie 的 Header,把相应的 Cookie 的值设为 deleted 等无效值,过期时间设置为 1970 年。
ajax 与 cookie
ajax 会自动带上同源的 cookie。
需要跨域携带 cookie,需要加参数 withCredentials: true
。并且后端需要响应 http 头 Access-Control-Allow-Origin: 允许的域名
,且不能为 *
。
服务器会返回一些 Header,允许 Credentials,允许发送哪些 Header,允许使用哪些方法请求,允许哪些域。
1 | Access-Control-Allow-Credentials: true |
token
token 一经发出就无法撤回,需要前端自行销毁,token 可以保证服务器无状态,不必处理庞大的 session 表以及 session 同步问题。如果记录 token 的发出与撤回情况,还不如使用 cookie session。也许适合非浏览器环境下模拟 cookie session。
但是无法实现通过删除 session 让 cookie 无效这种效果。无法实现给三方暴露一个让用户登出的后端接口。