cookie是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。
四种会话跟踪技术(URL重写、隐藏表单域、Cookie、Session)
服务端技术:URL重写,Session,Cookie。
客户端技术:Cookie,隐藏表单域。
web2.0应用趋势是动态页面加载,通过Session或URL重写识别用户,保存用户状态。
web3.0应用趋势是前后端分离,通过基于cookie的token识别用户,获取用户状态。
PS:token建议存放在cookies,而不要存放在LocalStorage 和 SessionStorage。
原因:LocalStorage 和 SessionStorage可以被js读取,而cookies 可以设置httponly 和secure 属性,提高鉴权机制安全性。
cookie的特点
同域,默认带请求凭据(cookie)
跨域,默认不带请求凭据(cookie)
session-cookie,关闭浏览器会删除,会话结束或者会话超时就删除。
cookie,关闭浏览器不会被删除,除非设置了expires/Max-Age,或者是浏览器清除cookies。
PS:防止cookie被篡改。
建议给cookie生成一个签名。
PS: 如果允许请求带cookies,会把所有的请求(图片,音视频,css,js)等资源都会发送cookies,从而降低了页面性能。
为此要使用CDN静态部署资源,避免静态资源请求发送cookie,提高请求的效率,节省请求带宽。
PS:跨域请求带cookies
实现:前端页面添加一个隐藏跨域iframe。
后端设置 Access-Control-Allow-Credentials: true。
Access-Control-Allow-Origin: * (这里注意使用通配符可能会报错)
应该为: Access-Control-Allow-Origin: "http://xxxx.com"
补充:关于客户端(浏览器)cookies限制问题。
IE无法使用cookie,原因是系统限制cookie。(出现这类情况可能使用系统优化软件导致)