首頁 web前端 js教程 Javascript本地儲存小結

Javascript本地儲存小結

Nov 22, 2016 am 11:01 AM
javascript

1. 各種儲存方案的簡單對比

Cookies:瀏覽器均支持,容量為4KB

UserData:僅IE支持,容量為64KB

Flash:100KB,非HTMLGoogle,需要插件支援

SQLite :需要插件支持,容量無限制

LocalStorage:HTML5,容量為5M

SesstionStorage:HTML5,容量為5M

globalStorage:Firefox獨有的,Firefox13

globalStorage:Firefox獨有的,Firefox13開始就不再支援這個方法, Google Gears SQLite需要插件,Flash已經伴隨著HTML5的出現漸漸退出了歷史舞台,因此今天我們的主角只有他們三個:Cookie,LocalStorge,SesstionStorge;

2. Cookie

作為一個前端和Cookie打交道的次數肯定不會少了,Cookie算是比較古老的技術了1993 年,網景公司僱員Lou Montulli 為了讓用戶在訪問某網站時,進一步提高訪問速度,同時也為了進一步實現個人化網絡,發明了今天廣泛使用的Cookie。

2.1 Cookie的特點

我們先來看下Cookie的特點:

1)cookie的大小受限制,cookie大小被限制在4KB,不能接受像大檔案或郵件那樣的大數據。

2)只要有請求涉及cookie,cookie就要在伺服器和瀏覽器之間來回傳送(這解釋為什麼本地文件不能測試cookie)。而且cookie資料總是會在同源的http請求中攜帶(即使不需要),這也是Cookie不能太大的重要原因。正統的cookie分發是透過擴充HTTP協定來實現的,伺服器透過在HTTP的回應頭中加上一行特殊的指示以提示瀏覽器依照指示產生對應的cookie。

3)用戶每請求一次伺服器數據,cookie則會隨著這些請求發送到伺服器,伺服器腳本語言如PHP等能夠處理cookie發送的數據,可以說是非常方便的。當然前端也是可以產生Cookie的,用js對cookie的操作相當的繁瑣,瀏覽器只提供document.cookie這樣一個對象,對cookie的賦值,取得都比較麻煩。而在PHP中,我們可以透過setcookie()來設定cookie,透過$_COOKIE這個超全域數組來取得cookie。

cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設定過期時間,表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就會消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不儲存在硬碟上而是保存在記憶體裡,當然這種行為並不是規範規定的。若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在不同的瀏覽器進程間共用,例如兩個IE視窗。而對於保存在記憶體裡的cookie,不同的瀏覽器有不同的處理方式。

2.2 Session

說到Cookie就不能不說Session。

Session機制。 session機制是一種伺服器端的機制,伺服器使用一種類似散列表的結構(也可能就是使用散列表)來保存資訊。當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識(稱為session id),如果已包含則表示以前已經為此客戶端建立過session ,伺服器就依照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端建立一個session並且產生一個與此session相關聯的session id ,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次回應中傳回給客戶端保存。儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個識別傳送給伺服器。一般這個cookie的名字都是類似SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳回伺服器。常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。例如:http://damonare.cn?sessionid=123456還有一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,新增一個隱藏字段,以便在表單提交時能夠把session id傳回伺服器。如:


   
   

實際上這種技術可以簡單的用對action應用URL重寫來取代。

2.3 Cookie和Session簡單比較

Cookie和Session 的區別:

1)cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。

2)cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session。

3)session會在一定時間內保存在伺服器上。當訪問增多,會比較佔用你伺服器的效能考慮到減輕伺服器效能方面,應使用cookie。

4)單一cookie保存的資料不能超過4K,許多瀏覽器都限制一個網站儲存最多20個cookie。

5)所以建議:

將登陸資訊等重要資訊存放為SESSION

其他資訊如果需要保留,可以放在cookie中

2.4 document.cookie的屬性

expires

2.4 document.cookie的屬性

expires

2.4 document.cookie的屬性

expires

2.4 document。期,預設為coolie是暫時存在的,他們儲存的值只在瀏覽器會話期間存在,當使用者推出瀏覽器後這些值也會遺失,如果想讓cookie存在一段時間,就要為expires屬性設定為未來的一個過期日期。現在已經被max-age屬性取代,max-age用秒來設定cookie的生存期。 Javascript本地儲存小結

path屬性

它指定與cookie關聯在一起的網頁。在預設的情況下cookie會與創建它的網頁,該網頁處於同一目錄下的網頁以及與這個網頁所在目錄下的子目錄下的網頁關聯。

domain屬性

domain屬性可以使多個網頁伺服器共用cookie。 domain屬性的預設值是建立cookie的網頁所在伺服器的主機名稱。不能將一個cookie的網域設定成伺服器所在的網域之外的網域。例如讓位於order.damonare.cn的伺服器能夠讀取catalog.damonare.cn設定的cookie值。如果catalog.damonare.cn的頁面所建立的cookie把自己的path屬性設定為“/”,把domain屬性設定成“.damonare.cn”,那麼所有位於catalog.damonare.cn的網頁和所有位於orlders.damonare .cn的網頁,以及位於damonare.cn網域的其他伺服器上的網頁都可以存取這個cookie。

secure屬性

它是一個布林值,指定在網路上如何傳輸cookie,預設是不安全的,透過一個普通的http連線傳輸

2.5 cookie實戰

這裡我們使用javascript來寫一段借用java w3cschool的demo:

function getCookie(c_name){
    if (document.cookie.length>0){
        c_start=document.cookie.indexOf(c_name + "=")
        if (c_start!=-1){
            c_start=c_start + c_name.length+1
            c_end=document.cookie.indexOf(";",c_start)
            if (c_end==-1) c_end=document.cookie.length
            return unescape(document.cookie.substring(c_start,c_end))
        }
    }
    return "";
}

function setCookie(c_name,value,expiredays){
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie=c_name+ "=" +escape(value)+
            ((expiredays==null) ? "" : "; expires="+exdate.toUTCString())
}
function checkCookie(){
    username=getCookie('username')
    if(username!=null && username!=""){alert('Welcome again '+username+'!')}
    else{
        username=prompt('Please enter your name:',"")
        if (username!=null && username!=""){
            setCookie('username',username,355)
        }
    }
}
登入後複製
Javascript本地儲存小結注意這裡對Cookie的生存期進行了定義,也就是355天

🎜3. localStorage🎜🎜這是一種持久化的儲存方式,也就是說如果不手動清除,資料就永遠不會過期。 🎜🎜它也是採用Key - Value的方式儲存數據,底層數據介面是sqlite,按網域將數據分別保存到對應資料庫檔案裡。它能保存更大的資料(IE8上是10MB,Chrome是5MB),同時保存的資料不會再傳送給伺服器,避免頻寬浪費。 🎜🎜3.1 localStorage的屬性方法🎜🎜下表是localStorge的一些屬性和方法🎜🎜🎜🎜🎜3.2 localStorage的缺點🎜🎜✟模式下不可讀取🎜🎜③ localStorage本質是在讀寫文件,數據多的話會比較卡(firefox會一次性將數據導入內存,想想就覺得嚇人啊)🎜🎜④ localStorage不能被爬蟲爬取,不要用它完全取代URL傳參🎜🎜4. sessionStorage🎜🎜和伺服器端使用的session類似,是一種會話層級的緩存,關閉瀏覽器會資料會被清除。不過有點特別的是它的作用域是視窗層級的,也就是說不同視窗間的sessionStorage資料不能共享的。使用方法(和localStorage完全相同):🎜🎜🎜🎜

5. sessionStorage和localStorage的区别

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。当用户关闭浏览器窗口后,数据立马会被删除。

localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。第二天、第二周或下一年之后,数据依然可用。

5.1 测试

sessionStorage:

if (sessionStorage.pagecount){
    sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
}else{
      sessionStorage.pagecount=1;
}
console.log("Visits "+ sessionStorage.pagecount + " time(s).");
登入後複製

测试过程:我们在控制台输入上述代码查看打印结果

控制台首次输入代码:

Javascript本地儲存小結

关闭窗口,控制台再次输入代码:

Javascript本地儲存小結

所谓的关闭窗口即销毁,就是这样,关闭窗口重新打开输入代码输出结果还是上面图片的样子,也就是说关闭窗口后sessionStorage.pagecount即被销毁,除非重心创建。或者从历史记录进入才会相关数据才会存在。好的,我们再来看下localStorge表现:

if (localStorage.pagecount){
    localStorage.pagecount=Number(localStorage.pagecount) +1;
}else{
    localStorage.pagecount=1;
 }
console.log("Visits "+ localStorage.pagecount + " time(s).");
登入後複製

控制台首次输入代码:

Javascript本地儲存小結

关闭窗口,控制台再次输入代码:

Javascript本地儲存小結

6. web Storage和cookie的区别

Web Storage(localStorage和sessionStorage)的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。

但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles