前端緩存都有哪些方法,有什麼區別?

瀏覽器緩存機制可以減少網路開銷,以便獲得更好的用戶體驗。在前端中常用的緩存有cookie及html中的localStorage和sessionStorage,那麼它們有什麼區別和聯繫?前端cookie和後端cookie、session有什麼區別?根據我的理解,整理如下:

1、cookie、localStorage、sessionStorage區別和聯繫

共同點:都是保存在瀏覽器端,且同源的。

區別:

1)cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞。而sessionStorage和localStorage不會自動把數據發給伺服器,僅在本地保存。

2)cookie數據還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。存儲大小限制也不同,cookie數據不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數據,如會話標識。

sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。

3)數據有效期不同:

sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;

localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;

cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。

4)作用域不同:

不同瀏覽器無法共享localStorage或sessionStorage中的信息。相同瀏覽器的不同頁面間可以共享相同的localStorage(頁面屬於相同域名和埠),但是不同頁面或標籤頁間無法共享sessionStorage的信息

cookie是在所有同源窗口中都是共享的

2、禁用cookie後,會出現什麼現象?

一般情況session是需要cookie配合使用的,但是有些瀏覽器禁用cookie後,就需要使用其他方式來實現回話管理。

在客戶端禁用Cookie的時候,我們要怎麼做呢,可以有以下兩種方法

URL重寫或者隱藏域(暴露信息不安全,一般不用)

· 設置php.ini中的session.use_trans_sid = 1或者在PHP編譯時打開–enable-trans-sid選項,讓PHP自動通過重寫URL傳遞session id。

· 如果是虛擬主機或者租用的伺服器,無法去修改PHP.ini,那麼可以手動通過URL傳值,或者通過隱藏表單傳遞session id。說簡單些就是自己去操縱sessionid這個唯一標識符,去鑒別用戶即可。

3、登陸信息一般放在session中,cookie還有用嗎?

有用,session會將sessionId存到cookie,再次請求時將sessionId隨請求頭給伺服器,然後拿到sessionId進行查詢即可。也就是說身份信息不會暴露在瀏覽器緩存中。只有sessionId暴露,提高安全性。

4、前端存cookie與後端存cookie有什麼區別?

前端可以通過document.cookie來設置cookie,但是這種方式會暴露信息,除非hash加密;

伺服器接受到http請求後在響應頭加上Set-Cookie欄位,它的值是要設置的Cookie的


推薦閱讀:

高性能 Web 緩存伺服器 nuster 1.7.9.6 發布

TAG:前端開發 | 緩存 |