設置 Cookie 的 domain 時,前面帶點和不帶點的區別?
- 帶點:父域名和任何子域名都可以訪問
- 不帶點:只有完全一樣的域名才可以訪問,IE 除外,仍然支持子域名訪問
服務端設置 cookie 之后發生了什么?
response.addCookie(cookie);
實際上,服務端設置 cookie 之后,只是將 cookie 種在 response header 的 set-cookie 中,待請求完成,瀏覽器收到響應后會將其存儲。若未設置 Expires/Max-Age,則瀏覽器關閉后 cookie 被刪除,若設置了 Expires/Max-Age 且時間未過期,則不會隨著瀏覽器的關閉而被刪除,下次打開該站點 cookie 值仍然存在!
image
瀏覽器每次請求服務端接口時,request header 中都會攜帶 cookie 值給服務端,服務端可以根據其來判斷登錄狀態
image
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