能夠存儲的數據結構到底有哪些?
瀏覽器端:cookie,WebStorage(localStorage,sessionStorage),userData,indexedDB
服務器端 : session
什麼是cookie?它存放在哪?
維基上給出的解釋是:Cookie(複數形態Cookies),又稱爲“小甜餅”。類型爲“小型文本文件”,指某些網站爲了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(通常經過加密)
其他得解釋大同小異,cookie 就是瀏覽器儲存在用戶電腦上的一小段文本文件。一個 Web 頁面或服務器告知瀏覽器按照一定規範來儲存這些信息,並在隨後的請求中將這些信息發送至服務器,Web 服務器就可以使用這些信息來識別不同的用戶。大多數需要登錄的網站在用戶驗證成功之後都會設置一個 cookie,只要這個 cookie 存在並可以,用戶就可以自由瀏覽這個網站的任意頁面。再次說明,cookie 只包含數據,就其本身而言並不有害
由上所述,Cookie應該是存放在客戶端的
cookie和session的關係?
- cookie是客戶端存放着,是爲了方便記錄特定用戶一些特定操作而存在的;而session是在服務器端的,是一種保存上下文機制,針對的每一個用戶
- session中保存的是對象,cookie中保存的是字符串。
- session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的。
- session需要藉助cookie才能正常工作,就是說session是依託於cookie的
其他詳細的差異與實現,文章結尾由參考的完章,裏面有詳細的解釋
localstorge和sessionstorge的關係?
localStorage 是 HTML5 標準中新加入的技術,它並不是什麼劃時代的新東西。早在 IE 6 時代,就有一個叫 userData 的東西用於本地存儲,而當時考慮到瀏覽器兼容性,更通用的方案是使用 Flash。localStorage 的數據需要手動清除
sessionStorage 與 localStorage 的接口類似,但保存數據的生命週期與 localStorage 不同。做過後端開發的同學應該知道 Session 這個詞的意思,直譯過來是“會話”。而 sessionStorage 是一個前端的概念,它只是可以將一部分數據在當前會話中保存下來,刷新頁面數據依舊存在。當頁面關閉後或者關閉瀏覽器後,sessionStorage 中的數據就會被清空。
兩者分關係就是他們都是瀏覽器上的存儲方式,你可以直接去調用他們,還有一點就是它們存儲的都是字符串,不可以存儲json對象
userData
IE瀏覽器可以使用userData來存儲數據,容量可達到640K,這種方案是很可靠的,不需要安裝額外的插件。缺點:它僅在IE下有效。
indexedDB
IndexedDB 就是瀏覽器提供的本地數據庫,它可以被網頁腳本創建和操作。IndexedDB 允許儲存大量數據,提供查找接口,還能建立索引。這些都是 LocalStorage 所不具備的。就數據庫類型而言,IndexedDB 不屬於關係型數據庫(不支持 SQL 查詢語句),更接近 NoSQL 數據庫。
三者的異同?
特性 | Cookie | localStorage | sessionStorage |
---|---|---|---|
數據的生命期 | 一般由服務器生成,可設置失效時間。如果在瀏覽器端生成Cookie,默認是關閉瀏覽器後失效 | 除非被清除,否則永久保存 | 僅在當前會話下有效,關閉頁面或瀏覽器後被清除 |
存放數據大小 | 4K左右 | 一般爲5MB | |
與服務器端通信 | 每次都會攜帶在HTTP頭中,如果使用cookie保存過多數據會帶來性能問題 | 僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信 | |
易用性 | 需要程序員自己封裝,源生的Cookie接口不友好 | 源生接口可以接受,亦可再次封裝來對Object和Array有更好的支持 |
cookie是網站爲了標示用戶身份而儲存在用戶本地終端(Client Side)上的數據(通常經過加密)。
cookie數據始終在同源的http請求中攜帶(即使不需要),記會在瀏覽器和服務器間來回傳遞。
sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。
cookie的安全性問題?
cookie的最大安全問題就是XSS攻擊 ,主要方式就是汪接口裏注入js代碼,防範的方法基本上還是網站開發人員的事,一般的方法就是提高驗證的可靠性,設置cookie的http只讀屬性等,具體的xss盜取Cooke的過程可以參考本文底部的引用文章;
參考文獻:
cookie相關:http://bubkoo.com/2014/04/21/http-cookies-explained/
cookie與session對比相關:https://juejin.im/entry/5766c29d6be3ff006a31b84e
http://www.cnblogs.com/xulb597/archive/2012/07/02/2573252.html
localStorage文章:https://jerryzou.com/posts/cookie-and-web-storage/
Xss獲取cookie:https://blog.csdn.net/qq_27552077/article/details/61671671