localStorage、sessionStorage、Cookie的
用一張表格形象簡單說明:
web儲存簡介.png
說明:
1:關於cookie存在的跨域問題
當瀏覽器向後臺發起請求時,如果是跨域請求,那麼就不會傳送cookie給後臺,而cookie中有一些資訊,例如JsessionID等身份資訊就不能傳送給後臺,這樣會導致伺服器認為你沒有登入。
2:cookie是如何工作的
1. 首先,我們假設當前域名下還是沒有 Cookie 的 2. 接下來,瀏覽器傳送了一個請求給伺服器(這個請求是還沒帶上 Cookie 的) 3. 伺服器設定 Cookie 併傳送給瀏覽器(當然也可以不設定) 4. 瀏覽器將 Cookie 儲存下來 5. 接下來,以後的每一次請求,都會帶上這些 Cookie,傳送給伺服器 ps: Cookie 雖然是儲存在瀏覽器,但是通常由伺服器端進行設定,當然客戶端也可以設定
image.png
Cookie 的屬性選項
每個 Cookie 都有一定的屬性,如什麼時候失效,要傳送到哪個域名,哪個路徑等等。在設定任一個 Cookie 時都可以設定相關的這些屬性,當然也可以不設定,這時會使用這些屬性的預設值。
expires
expires 選項用來設定 Cookie 什麼時間內有效,expires 其實是 Cookie 失效日期。
expires 必須是 GMT 格式的時間(可以透過 new Date().toGMTString() 或者 new Date().toUTCString() 來獲得),所以,Cookie 的失效時刻到了之後,透過 document.cookie 就訪問不到這個 Cookie 了,當然以後傳送請求也不會再帶上這個失效的 Cookie 了。
domain 和 path
name
、domain
和 path
可以標識一個唯一的 Cookie。domain
和 path
兩個選項共同決定了 Cookie 何時被瀏覽器自動新增到請求頭部中傳送出去。具體是什麼原理請看 Cookie 的作用域和作用路徑 這個章節。
如果沒有設定這兩個選項,則會使用預設值。domain
的預設值為設定該 Cookie 的網頁所在的域名,path
預設值為設定該 Cookie 的網頁所在的目錄。
secure
secure 選項用來設定 Cookie 只在確保安全的請求中才會傳送。當請求是 HTTPS 或者其他安全協議時,包含 secure 選項的 Cookie 才能被儲存到瀏覽器或者傳送至伺服器。
預設情況下,Cookie 不會帶 secure 選項(即為空)。所以預設情況下,不管是 HTTPS 協議還是 HTTP 協議的請求,Cookie 都會被髮送至服務端。
httpOnly
這個選項用來設定 Cookie 是否能透過 js 去訪問。預設情況下,Cookie 不會帶 httpOnly
選項(即為空),客戶端是可以透過 js 程式碼去訪問(包括讀取、修改、刪除等)這個 Cookie 的。當 Cookie 帶 httpOnly
選項時,客戶端則無法透過 js 程式碼去訪問(包括讀取、修改、刪除等)這個 Cookie。
設定 Cookie
明確一點:Cookie 可以由服務端設定,也可以由客戶端設定。
服務端設定 Cookie
看回剛剛的那張圖,我們設定了很多個 Cookie。
image.png
一個 Set-Cookie 欄位只能設定一個 Cookie,當你要想設定多個 Cookie,需要新增同樣多的 Set-Cookie 欄位
服務端可以設定 Cookie 的所有選項:expires、domain、path、secure、HttpOnly
客戶端設定 Cookie
在網頁即客戶端中我們也可以透過 js 程式碼來設定 Cookie。
設定
document.cookie = 'name=value'
可以設定 Cookie 的下列選項:expires、domain、path,各個鍵值對之間都要用 ;
和 空格
隔開
document.cookie='name=value; expires=Thu, 26 Feb 2116 11:50:25 GMT; domain=sankuai.com; path=/';
secure
只有在 https 協議的網頁中,客戶端設定 secure 型別的 Cookie 才能成功
HttpOnly
客戶端中無法設定 HttpOnly 選項
刪除 Cookie
Cookie 的 name、path 和 domain 是唯一標識一個 Cookie 的。我們只要將一個 Cookie 的 max-age 設定為 0,就可以刪除一個 Cookie 了。
let removeCookie = (name, path, domain) => { document.cookie = `${name}=; path=${path}; domain=${domain}; max-age=0`}
Cookie 的作用域和作用路徑
作用域
在說這個作用域之前,我們先來對域名做一個簡單的瞭解。
子域,是相對父域來說的,指域名中的每一個段。各子域之間用小數點分隔開。放在域名最後的子域稱為最高階子域,或稱為一級域,在它前面的子域稱為二級域。
以下圖為例,news.163.com 和 sports.163.com 是子域,163.com 是父域。
image.png
當 Cookie 的 domain 為 news.163.com,那麼訪問 news.163.com 的時候就會帶上 Cookie;
當 Cookie 的 domain 為 163.com,那麼訪問 news.163.com 和 sports.163.com 就會帶上 Cookie
作用路徑
當 Cookie 的 domain 是相同的情況下,也有是否帶上 Cookie 也有一定的規則。
image.png
在子路徑內可以訪問訪問到父路徑的 Cookie,反過來就不行。
參考文章:
作者:麥殼兒UIandFE2
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1806/viewspace-2813096/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cookie、sessionStorage、localStorageCookieSession
- cookie, sessionStorage, localStorageCookieSession
- cookie、sessionStorage、localStorage的區別?CookieSession
- Cookie LocalStorage SessionStorage對比CookieSession
- localStorage 與 sessionStorage / cookie 和 sessionSessionCookie
- 詳說 Cookie, LocalStorage 與 SessionStorageCookieSession
- localStorage、sessionStorage、Cookie的區別及用法SessionCookie
- Cookie && Session && localStorage && sessionstorage && HTTP快取CookieSessionHTTP快取
- localStorage,sessionStorage和cookie的區別及使用SessionCookie
- 理解cookie、session、localStorage、sessionStorage的關係與區別CookieSession
- Cookie、localStorage 和 sessionStorage 的區別及應用例項CookieSession
- 前端存貯全家桶--cookie、sessionStorage、localStorage、和indexedDB重點合集前端CookieSessionIndex
- sessionStorage和localStorage的區別Session
- localStorage和sessionStorage區別Session
- localStorage與sessionStorage 區別Session
- Yet another intro for localStorage and sessionStorageSession
- 深入瞭解瀏覽器儲存:對比Cookie、LocalStorage、sessionStorage與IndexedDB瀏覽器CookieSessionIndex
- 【基礎梳理】cookie、session、sessionStorage、localStorage之間的區別及應用場景CookieSession
- web本地儲存(localStorage、sessionStorage)WebSession
- cookies sessionStorage和localstorage區別CookieSession
- localStorage和sessionStorage原型方法新增Session原型
- localStorage和SessionStorage,Application,Cache快取SessionAPP快取
- localStorage和sessionStorage儲存封裝Session封裝
- cookie,session,sessionStorage,localStotage的區別CookieSession
- 移動Web——localStorage,sessionStorage,Storage事件監聽WebSession事件
- 請描述一下cookies、sessionStorage和localStorage的區別?CookieSession
- H5本地儲存:sessionStorage和localStorageH5Session
- HTML5本地儲存localStorage與sessionStorage詳解HTMLSession
- 登入過期--localStorage加sessionStorage實現7天登入過期Session
- 2020-12-26 JavaScript基本概念5:cookie,sessionStorage和localStorage,0.1+0.2!=0.3怎麼處理,陣列的常用方法,new一個物件的過程,繼承JavaScriptCookieSession陣列物件繼承
- sessionStorageSession
- sessionStorage 用法Session
- localStorage 用法
- sessionStorage中的setItem和getItemSession
- sessionStorage.lengthSession
- sessionStorage.removeItem()SessionREM
- sessionStorage.setItem()Session
- sessionStorage.clear()Session