设置 Cookie 的 domain 时,前面带点和不带点的区别?
- 带点:父域名和任何子域名都可以访问
- 不带点:只有完全一样的域名才可以访问,IE 除外,仍然支持子域名访问
服务端设置 cookie 之后发生了什么?
response.addCookie(cookie);
实际上,服务端设置 cookie 之后,只是将 cookie 种在 response header 的 set-cookie 中,待请求完成,浏览器收到响应后会将其存储。若未设置 Expires/Max-Age,则浏览器关闭后 cookie 被删除,若设置了 Expires/Max-Age 且时间未过期,则不会随着浏览器的关闭而被删除,下次打开该站点 cookie 值仍然存在!
浏览器每次请求服务端接口时,request header 中都会携带 cookie 值给服务端,服务端可以根据其来判断登录状态
Cookie 的 HttpOnly 属性
默认为空,允许客户端通过 js 操作 cookie,若此属性设置为 true,则只有在 http 请求的 request header 中会携带此 cookie,而不能通过 document.cookie 来访问此 cookie,意在提供一个安全的措施来阻止通过 js 发起的跨站脚本攻击(XSS)窃取 cookie 的行为
Cookie 的作用范围
比如 aaa.com 访问 bbb.com 站点的 API(如 bbb.com/passport/login),显然 Request URL 是在 bbb.com 下,则 http 的 request header 携带的 cookie 是 domain 为 bbb.com 的 cookie
若 aaa.com 访问同域名(即 aaa.com,端口可以不同)下的 API,显然 Request URL 是在 aaa.com 下,则 http 的 request header 携带的 cookie 是 domain 为 aaa.com 的 cookie