1. 什麼是Cookie?
- 服務器經過 Set-Cookie 頭給客戶端一串字符串
- 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
- 客戶端要在一段時間內保存這個Cookie
- Cookie 默認在用戶關閉頁面後就失效,後臺代碼能夠任意設置 Cookie 的過時時間
- 大小大概在 4kb 之內
2. cookie的設置獲取和刪除
cookie是運行在客戶端的,能夠用JS來設置cookie.
首先須要稍微瞭解一下cookie的結構,簡單地說:cookie是以鍵值對的形式保存的,即key=value的格式。各個cookie之間通常是以「;」分隔。後端
- JS設置cookie:
document.cookie="name="+username;
- JS讀取cookie:
var getCookie = function (name) { var arr; var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else return null; };
- JS刪除cookie:
var delCookie = function (name) { setCookie(name, ' ', -1); };
3. cookie的主要做用:
- 會話狀態管理(如用戶登陸狀態、購物車、遊戲分數和其它須要記錄的信息)
- 個性化設置(如用戶自定義設置、主題等)
- 瀏覽器行爲跟蹤(如跟蹤分析用戶行爲)
4. cookie設置語法:
document.cookie = "cookieName=mader; expires=Fri, 31 Dec 2017 15:59:59 GMT; path=/mydir; domain=cnblogs.com; max-age=3600; secure=true";
- cookieName=mader :name=value,cookie的名稱和值
- expires=Fri, 31 Dec 2017 15:59:59 GMT: expires,cookie過時的日期,若是沒有定義,cookie會在對話結束時過時。日期格式爲 new Date().toUTCString()
- path=/mydir: path=path (例如 '/', '/mydir') 若是沒有定義,默認爲當前文檔位置的路徑。
- domain=cnblogs.com: 指定域 (包括全部子域名)
- max-age=3600: 文檔被查看後cookie過時時間,單位爲秒
- secure=true: cookie只會被https傳輸 ,即加密的https連接傳輸
5. 相關問題:
我在 Chrome 登陸了獲得 Cookie,用 Safari 訪問,Safari 會帶上 Cookie 嗎?
不會,由於瀏覽器會帶上域名Cookie, Cookie 還能夠根據路徑作限制瀏覽器
Cookie 存在哪?
Windows 存在 C 盤的一個文件裏服務器
Cookie會被用戶篡改嗎?
能夠,能夠用Session 來解決這個問題,防止用戶篡改cookie
Cookie 有效期嗎?
默認有效期20分鐘左右,不一樣瀏覽器策略不一樣
後端能夠強制設置有效期,具體語法看 MDNdom
Cookie 遵照同源策略嗎?
也有,不過跟 AJAX 的同源策略稍微有些不一樣。
當請求 qq.com 下的資源時,瀏覽器會默認帶上 qq.com 對應的 Cookie,不會帶上 baidu.com 對應的 Cookie
當請求 v.qq.com 下的資源時,瀏覽器不只會帶上 v.qq.com 的Cookie,還會帶上 qq.com 的 Cookie加密