瀏覽器的本地存儲


瀏覽器的本地存儲

傳統的本地存儲cookie和session

​ 前端和后端進行數據交互的時候,是用http請求的,但是http是一種無狀態的協議(所謂無狀態,是指收到一個請求,返回一個響應,不關心請求者的身份),http也不是一種持久性的連接,對於請求來說,記住某個用戶的身份特征是比較困難的,后來就出現了cookie的機制。

  • 用戶端保存請求信息的機制

    cookie的出現,就是為了在用戶端保存用戶的身份。瀏覽器會在操作系統里開辟一個文件,專門存放cookie,這個文件只要不刪除,就會一直存在。而在每次請求后端時,都會在http的頭里面的,帶上這個cookie信息,后端就會知道這個http請求是由誰發來的。

  • 分號分隔的多個key-value字段

    cookie其實是一個字符串,它的格式就是分號分隔的多個key-value字段。

  • 存儲在本地的加密文件里

    cookie存儲在系統的本地文件里,這是可以通過瀏覽器操作的,為數不多的文件之一。但是出於安全考慮,這個cookie文件一般的加密的,只能通過瀏覽器可以操作它。如果直接打開這個cookie文件,就會發現它是一堆加密后的文本,不能直接閱讀里面的內容。

  • 域名和路徑限制

    cookie有域名和路徑的限制,一個請求只能操作自己有權限的cookie。

cookie里的字段

  • name :cookie名稱

  • domain:cookie生效的域名(有作用域限制,二級域名可以使用一級域名的cookie,但是不能其他域名的cookie,也不能操作所屬三級域名的cookie)

  • path:cookie生效的路徑

  • expiress:cookie過期時間

  • HttpOnly:cookie由服務設置的,並且不允許在用戶端進行更改,對於這種類型的cookie,js是操作不到它的,這是為了防止用戶端惡意修改cookie,造成安全問題。

cookie的缺點

​ 盡管 cookie的設計目的是在 http中保存用戶狀態,但在某些情況下,也可以將它作為一個本地存儲。但這種使用方式有一個缺點,就是有些信息我們只需在本地存儲就能使用,例如:記錄用戶選擇了哪個菜單等等,這完全是為前端展示而設計的,但當這些信息記錄到 cookie中時,所有在線請求都會包含這條與后端沒有什么關系的 cooKie,增加了網絡請求的體積,這樣做並不科學。

session

  • 服務端保存請求信息的機制

  • sessionId通常存放在cookie里

    在接到http請求以后,服務端生成一個sessionId,然后把這個sessionId種到用戶的cookie里,這樣同一個用戶,再次發出請求時,就會根據帶過來的cookie,知道這個請求是由誰發的。當然sessionId也不一定都是用cookie來實現的,也可以是放在請求參數里,或者是在http的頭里面開辟一個token字段。

  • 會話由瀏覽器控制,會話結束,session失效

    沒有設置時間的cookie,只會存在於一次會話中,瀏覽器一關閉就結束了。而cookie里這個一般不會設置時間的sessionId也就消失了。

H5里面的本地存儲

localStorage

  • H5新特性

  • 有域名限制,不存在作用域概念

    域名是完全匹配的,不像cookie那樣有繼承性,只能在當前域名下使用。

  • 只有key-value

    localStorage 被存在一個對象里,也是一些key-value的鍵值對,而且這個value只能是基礎類型。如果使用了對象等引用類型,它會把對象的toString()結果,作為value存起來,里面的信息也就丟失了。

  • 沒有過期時間

    只要不刪除,它就一直存在

  • 瀏覽器關閉后不消失

    以文件的形式存儲在操作系統上,但是也是不可讀的。

sessionStorage

  • 瀏覽器關閉后消失


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM