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 无效这种效果。无法实现给三方暴露一个让用户登出的后端接口。


