日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

清理localstorage_关于Cookie、Session、LocalStorage、Cache-Control(摘录)

發布時間:2024/8/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清理localstorage_关于Cookie、Session、LocalStorage、Cache-Control(摘录) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于Cookie、Session、LocalStorage、Cache-Control,在總結前先了解一個過程:當用戶在一個瀏覽器注冊賬號再登錄,客戶端和服務器發生了什么?

一、發生了什么?

1、用戶打開注冊頁面,提交信息(登錄名、密碼……)后,客戶端獲取用戶輸入的信息保存到hash表里,并發送post請求路由為/sign_up給服務器

2、服務器判斷路由后進行接受數據(字符串)并將字符串轉化為對象處理,保存到數據庫(一個文件里),并告知用戶注冊成功了(后端設置返回響應,前端根據響應內容來呈現頁面給用戶)

3、用戶打開登錄頁面,提交信息(登錄名、密碼……)發送post請求路由為/sign_in給服務器

4、服務器判斷這次的提交信息(登錄名、密碼……)在不在數據庫里。如果不在,那么告知用戶去注冊一個。如果在那么就將SessionID(隨機數)通過cookie發給客戶端。每一個SessionID對應了一個用戶的信息,但返回的cookie是一個隨機數,因為隨機數可以提高保密度。

5、客戶端再次訪問服務器時,就會給帶上這個cookie,發送get請求給服務器。服務器讀取SessionID。

6、服務器通過SessionID找到對應用戶的隱私信息,然后進行判斷。如果確定是同一個用戶,那么響應一個新的html文件(登錄后的頁面)給客戶端

那么……

二、關于Cookie

Cookie是什么?舉個例子:
小明(瀏覽器)第一次去公園(服務器)的時候,公園給了小明一張票(Cookie,包含了小明的信息)并告訴小明2天內(Cookie的有效時間)帶著這個票可以免費的進出,次數不限。所以小明在這段時間內,每次去公園都得帶上票。

1、Cookie的特點:

  • 服務器通過 Set-Cookie 響應頭設置 Cookie
  • 瀏覽器得到 Cookie 之后,每次訪問相同域名的網頁時都要帶上 Cookie
  • 服務器讀取 Cookie 就知道登錄用戶的信息(email)
  • 大小在 4kb 以內

2、在A瀏覽器登錄得到的Cookie,會在B瀏覽器帶上A瀏覽器的Cookie嗎?

NO

3、Cookie 存在哪里?

存在 C 盤的一個文件里

4、Cookie會被用戶篡改嗎?

可以,但 Session 來解決這個問題,防止用戶篡改

5、Cookie 有效期嗎?

默認有效期20分鐘左右,不同瀏覽器策略不同。后端可以強制設置有效期,具體語法看 MDN:

HTTP cookies?developer.mozilla.org

6、Cookie 遵守同源策略嗎?

也有,不過跟 AJAX 的同源策略稍微有些不同:

  • 當請求 qq.com 下的資源時,瀏覽器會默認帶上 qq.com 對應的 Cookie,不會帶上 baidu.com 對應的 Cookie
  • 當請求 v.qq.com 下的資源時,瀏覽器不僅會帶上 v.qq.com 的Cookie,還會帶上 qq.com 的 Cookie

既然如此,那為什么要設置Session?

因為用戶可以修改Cookie,那么就可以用別人的身份發送請求獲取響應……

二、關于Session

Session是什么?繼續剛剛的例子:
由于其他人可以修改票的信息拿著這張票進公園,所以公園(服務器)把所有人的信息儲存在一個本子里(內存),并給每一個人的信息設置對應的隨機數字(SessionID)作為票(Cookie)給用戶。那么小明拿到的票就不是自己的信息而是一串隨機數。當進小明再次公園的時候,公園就會核對這串隨機數與本子上記錄隨機數進行核對。如果準確就可以進去了。

所以Session就是:

  • 將 SessionID(隨機數,保密性強)通過 Cookie 發給客戶端
  • 客戶端訪問服務器時,服務器讀取 SessionID
  • 服務器有一塊內存(哈希表)保存了所有 session
  • 通過 SessionID 我們可以得到對應用戶的隱私信息,如 id、email
  • 這塊內存(哈希表)就是服務器上的所有 session
sessions[hash.seesionId].name //從內存里找到對應的ID,所對應的用戶名

三、關于LocalStorage&SessionStorage

1、LocalStorage:

  • LocalStorage 跟 HTTP 無關
  • HTTP 不會帶上 LocalStorage 的值
  • 只有相同域名的頁面才能互相讀取 LocalStorage(沒有同源那么嚴格)
  • 每個域名 LocalStorage 最大存儲量為 5Mb 左右(每個瀏覽器不一樣)
  • 常用場景:記錄有沒有提示過用戶(沒有用的信息,不能記錄密碼)
  • LocalStorage 永久有效,除非用戶清理緩存

LocalStorage的三個API:

localStorage.setItem(key,value) // 創建一個hash localStorage.getItem(key) //得到對應的value localStorage.clear() //清空

應用場景(用戶第一次登錄網頁會提示“網頁即將改版”,第二次登錄就不會提示了)

let already = localStorage.getItem('已經提示過了') if(!already){alert('網頁即將改版了')localStorage.setItem('已經提示過了',true) }

2、SessionStorage(會話存儲):

  • SessionStorage 跟 HTTP 無關
  • HTTP 不會帶上 SessionStorage 的值
  • 只有相同域名的頁面才能互相讀取 SessionStorage (沒有同源那么嚴格)
  • 每個域名 SessionStorage 最大存儲量為 5Mb 左右(每個瀏覽器不一樣)
  • SessionStorage 在用戶關閉頁面(會話結束)后就失效。

四、Cache-Control(緩存控制)&Expires&ETag

1、Cache-Control是對HTTP進行緩存優化的

如果想給哪個請求設置緩存,就在服務器給相關請求返回的文件設置以下代碼:

response.setHeader(‘Cache-Control’,‘max-age=30’)//對某個文件設置30秒內緩存

舉了例子:

  • 當Chrome瀏覽器第一次向服務器發送了一個路徑為/main.js的請求
  • 服務器響應一個xxx文本,瀏覽器下載了這個文本并保存在內存中
  • 在30秒內Chrome瀏覽器輸入同樣的URL,內存返回了該文本
  • 30秒之后Chrome瀏覽器第三發發送請求,服務器響應文本,瀏覽器下載并保存這個文本你在內存中
  • ……

2、Cache-Control設置了時間,如何更新緩存?

首頁不能設置Cache-Control,因為瀏覽器不允許,因為用戶刷新后根本就不會向服務器發送任何請求。

一般其他會設置1-10年,如果中途發生改變可以更改文件請求的URL,只要URL變了就會發送新的請求。

3、Cache-Control與Expires的區別?

Cache-Control后面的時間是緩存多長時間

response.setHeader(‘Cache-Control’,‘max-age=30’)

Expires的后面幾分幾秒過期指的是本地時間,如果本地時間錯亂了……

response.setHeader(‘Expires’,‘//GM的時間’)

4、Cache-Control與ETag 的區別?

每一個文件都會有一個對應的md5(摘要算法),如果文件有一絲絲的變動md5的值就會相差很大。啥是md5,點連接查看。

https://zh.wikipedia.org/zh-hans/MD5?zh.wikipedia.org

在1-copy.txt改了一個數字得出的結果

那么使用ETag就會響應給客戶端一個md5,當客戶端下一次請求時會提交一個md5給服務器,服務器判斷進行判斷是否要響應一個文件給客戶端。如果不需要響應文件,那么返回一個304給客戶端。而Cache-Control是直接不請求。

304 有請求,有響應,但是響應沒有第四部分
緩存沒有請求

五、幾個問題

1、Cookie 和 Session 的區別?

Session是基于Cookie實現的,因為Session 必須將 SessionID(隨機數)通過 Cookie 發給客戶端。瀏覽器得到 Cookie 之后,每次訪問相同域名的網頁時都要帶上 Cookie。

2、Cookie 和 LocalStorage 的區別?

客戶端每次訪問相同域名時會帶上cookie,最大容量4k。而LocalStorage跟HTTP無關,所以不會帶上LocalStorage的值,5Mb。

3、LocalStorage 和 SessionStorage 的區別?

LocalStorage 永久有效,除非用戶清理緩存。SessionStorage在用戶關閉頁面(會話存儲)后就失效了。

4、Cookie 如何設置過期時間?如何刪除 Cookie?

Cookie設置過期時間:

  • Expires指定了一個日期/時間, 在這個日期/時間之后 Cookie 過期
  • max-age指定了一個秒數,經過此秒數后 Cookie 過期
  • 如果不設置這個標頭,則默認關閉瀏覽器后 Cookie 過期

Cookie 的刪除有不同方式:

  • 服務器端可以通過設置 Expires、max-age 兩個標簽將 Cookie 設置為過期狀態
  • JavaScript 可以通過document.cookie API 刪除 Cookie

5、Cache-Control: max-age=1000 緩存 與 ETag 的「緩存」有什么區別?

使用ETag就會響應給客戶端一個md5,當客戶端下一次請求時會提交一個md5給服務器,服務器判斷進行判斷是否要響應第四部分內容給客戶端。如果不需要響應第四部分內容,那么返回一個304給客戶端。而Cache-Control是在一段時間直接不請求。

總結

以上是生活随笔為你收集整理的清理localstorage_关于Cookie、Session、LocalStorage、Cache-Control(摘录)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。