什麼是cookie
- 服務器經過 Set-Cookie 頭給客戶端一串字符串
- 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
- 客戶端要在一段時間內保存這個Cookie(windows C盤某文件)
- Cookie 默認在用戶關閉頁面後就失效,後臺代碼能夠任意設置 Cookie 的過時時間
- 設置過時時間:
response.setHeader('Cache-Control',' max-age=<seconds>
- 大小大概在 4kb 之內
- 前端永遠不要 讀/寫 cookie,用localStorage。
- 刪除 Cookie: 設置 → 清除瀏覽器數據 → 高級 勾選cookie及其餘網站數據,點擊清除數據便可
什麼是 session
- 將 SessionID(隨機數)經過 Cookie 發給客戶端
- 客戶端訪問服務器時,服務器讀取 SessionID
- 服務器有一塊內存(哈希表)保存了全部 session
- 經過 SessionID 咱們能夠獲得對應用戶的隱私信息,如 id、email
- 這塊內存(哈希表)就是服務器上的全部 session
- session最大的問題就是 佔內存 !
- 不基於 cookie 的 session :服務器直接返回 sessionId ,前端直接把 sessionId 放到localStorage,當訪問主頁時,把sessionId當作查詢參數傳遞給服務器。即 Session 能夠用 LocalStorage + 查詢參數實現(超綱)
什麼是 localStorage (持久化存儲)
localStorage 是html5 提供的一個API,實質是一個哈希表。(session是服務器的哈希表,localStorage是瀏覽器的哈希表)html
特色:
- LocalStorage 跟 HTTP 無關
- HTTP 不會帶上 LocalStorage 的值
- 只有相同域名的頁面才能互相讀取 LocalStorage(沒有同源那麼嚴格)
- 每一個域名 localStorage 最大存儲量爲 5Mb 左右(每一個瀏覽器不同)
- 經常使用場景:記錄有沒有提示過用戶(沒有用的信息,不能記錄密碼)
- LocalStorage 永久有效,除非用戶清理緩存(windows C盤某文件)
方法:
localStorage.clear()
: 不接受參數,清空 localStorage
localStorage.getItem('參數1-key')
: 接受一個參數,返回該參數對應的值。
localStorage.setItem('參數1-key', '參數2-value')
: 接受兩個參數,向 localStorage 內存儲信息。前端
什麼是 sessionstorage(會話存儲)
一、二、三、4 同
5. SessionStorage 在用戶關閉頁面(會話結束)後就失效。
其餘全部特性都與 localStorage 同樣,方法也同樣。html5
HTTP緩存
Cache-Control 是什麼
通常首頁不要設置Cache-Control,尤爲是html。
只有相同的URl,瀏覽器纔會去讀取Cache。
當頁面升級時,就改變URL,這樣就能夠經過首頁這個接口讓瀏覽器下載到最新的內容。面試
功能:
- 可讓瀏覽器在必定時間內不訪問服務器,直接用本地內存/硬盤響應,加快訪問速度。
- 若是要升級,只須要在入口處(html文件)把URL稍微變一下,瀏覽器就會去下載最新版,並緩存下來。
補充:
瀏覽器緩存詳解:expires,cache-control,last-modified,etag詳細說明算法
Expire 是什麼:
Expire 是設置 何時過時,給了一個時間;可是這個時間是本地時間,若是本地時間錯亂就會出錯。
Cache-Control是新的API,取代了Expire,可是面試官會問。json
MD5 是什麼
MD5 是一個摘要算法。它把一個文件變成一個字符串,當這個文件被篡改,再次計算 MD5 值就會發生變化。好比下載文件,就可也比較雙方 MD5 值來肯定下載的文件是否正確。 MD5 會將小的差別擴大化,越小的差別,獲得的 MD5 字符串差別就越大。windows
MD5 和 HTML 有什麼關係呢? 就要看 ETag 。瀏覽器
ETag 是什麼
ETage能夠給一個資源一個內容。緩存
使用Cache-Control 是根本就不發請求;
用ETag是發請求,可是響應沒有第四部分(不下載),且代碼爲304。服務器
面試一: cookie 與 session 有什麼關係?
- 通常來講,session 是基於 cookie 實現的,由於 session 必須把 sessionId 放在 cookie 裏,沒有 sessionId ,就沒有 session 。
面試二: cookie 與 localstorage 的區別是什麼?
- 每次請求的時候都會把 cookie 帶給服務器,而 localStorage 不會帶給服務器。由於 localStorage 與 http 無關。
- cookie 通常是 4kb, localStorage 通常是 5mb。
面試三: localStorage 和 sessionstorage 有什麼區別?
- SessionStorage 在用戶關閉頁面(會話結束)後就失效,而 LocalStorage 永久有效,除非用戶清理緩存。
小知識
({}).toString() -> '[object, Object]'
任何一個對象轉換成字符串,都是變成這種形式。
想要存對象,就使用json:
localStorage.setItem('jsonString, JSON.stringify({name:'obj'}))