Cookie-Session

服务器通过返回 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.comb.example.com 都会自动携带。

把 cookie 设置在 a.example.com,那么访问 a.example.com 会自动携带。 访问 b.example.com 不会自动携带。

所以说 cookie 的同源策略比 ajax 的宽松。

服务器还是返回 Set-Cookie 的 Header,把相应的 Cookie 的值设为 deleted 等无效值,过期时间设置为 1970 年。

ajax 会自动带上同源的 cookie。

需要跨域携带 cookie,需要加参数 withCredentials: true。并且后端需要响应 http 头 Access-Control-Allow-Origin: 允许的域名,且不能为 *

服务器会返回一些 Header,允许 Credentials,允许发送哪些 Header,允许使用哪些方法请求,允许哪些域。

1
2
3
4
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: WWW-Authenticate,Server-Authorization,Content-Type,Authorization
Access-Control-Allow-Methods: GET,HEAD,PUT,POST,DELETE
Access-Control-Allow-Origin: http://zuweiye.com

token

token 一经发出就无法撤回,需要前端自行销毁,token 可以保证服务器无状态,不必处理庞大的 session 表以及 session 同步问题。如果记录 token 的发出与撤回情况,还不如使用 cookie session。也许适合非浏览器环境下模拟 cookie session。

但是无法实现通过删除 session 让 cookie 无效这种效果。无法实现给三方暴露一个让用户登出的后端接口。