1. 程式人生 > >localStorage , SsessionStorage , Cookie , Session的聯絡與區別

localStorage , SsessionStorage , Cookie , Session的聯絡與區別

一、Web本地儲存

【含義說明】

localStorage(長期儲存):瀏覽器關閉後,資料一直存在,不會被清除,即沒有時間限制。

seesionStorage(臨時儲存):針對每一個session進行資料儲存。只有當瀏覽器關閉視窗後,資料才會被清除。

注意:本地儲存都是不能跨域訪問的

【使用方法】

1. 儲存資料到本地

    const info = {
        name: 'Lee',
        age: 20,
        id: '001'
    };
    sessionStorage.setItem('key', JSON.stringify(info));
    localStorage.setItem('key'
, JSON.stringify(info));

2. 從本地儲存獲取資料

    var data1 = JSON.parse(sessionStorage.getItem('key'));
    var data2 = JSON.parse(localStorage.getItem('key'));

3. 本地儲存中刪除某個儲存的資料

    sessionStorage.removeItem('key');
    localStorage.removeItem('key');

4. 刪除所有儲存的資料

    sessionStorage.clear();
    localStorage.clear();

5. 監聽本地儲存的變化

Storage 發生變化(增加、更新、刪除)時的 觸發,同一個頁面發生的改變不會觸發,只會監聽同一域名下其他頁面改變 Storage

    window.addEventListener('storage', function (e) {
        console.log('key', e.key);
        console.log('oldValue', e.oldValue);
        console.log('newValue', e.newValue);
        console.log('url', e.url);
    })

二、cookie和session 

【定義說明】

Cookie:存在於客戶端即瀏覽器,可以儲存使用者的賬號密碼,用於識別使用者,當瀏覽器雨伺服器互動時,會同時傳送cookie。

         1. 有兩種存在方式:1)永續性cookie(persistent cookie),設定了儲存時間,以檔案的形式儲存在使用者硬碟;2)會話cookie(session cookie),沒有設定儲存時間,瀏覽器關閉前消失,儲存在記憶體,目前和伺服器互動的時候使用的都是會話cookie

         2. Cookie其實還可以用在一些方便使用者的場景下,設想你某次登陸過一個網站,下次登入的時候不想再次輸入賬號了,怎麼辦?這個資訊可以寫到Cookie裡面,訪問網站的時候,網站頁面的指令碼可以讀取這個資訊,就自動幫你把使用者名稱給填了,能夠方便一下使用者。這也是Cookie名稱的由來,給使用者的一點甜頭。

Session:存在於伺服器端,用於跟蹤使用者會話。每一個網站訪客都會被分配一個唯一的識別符號,即會話ID(session_ID)。可以儲存在檔案、資料庫、記憶體中。

        1. 由於HTTP協議是無狀態的協議,所以服務端需要記錄使用者的狀態時,就需要用某種機制來識具體的使用者,這個機制就是Session。比如購物車,當你點選下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個使用者操作的,這個時候服務端要為特定的使用者建立特定的Session,用於標識這個使用者,並且跟蹤使用者,這樣才知道該使用者的購物車裡面有幾本書。這個Session是儲存在服務端的,有一個唯一標識。在服務端儲存Session的方法很多,記憶體、資料庫、檔案都有。叢集的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session伺服器叢集,用來儲存使用者會話,這個時候 Session 資訊都是放在記憶體的,使用一些快取服務比如Memcached之類的來放 Session。

         2. 思考一下服務端如何識別特定的客戶?這個時候Cookie就登場了。每次HTTP請求的時候,客戶端都會發送相應的Cookie資訊到服務端。實際上大多數的應用都是用 Cookie 來實現Session跟蹤的,第一次建立Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 裡面記錄一個Session ID,以後每次請求把這個會話ID傳送到伺服器,我就知道你是誰了。

【聯合工作】

         當程式需要為某個客戶端的請求建立一個session時,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識(稱為session_ID),如果已包含則說明以前已經為此客戶端建立過session,伺服器就按照session_ID把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session_ID,則會為此客戶端建立一個session並且生成一個與此session相關聯的session_ID,session_ID的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session_ID將被在本次響應 中返回給客戶端儲存。客戶端儲存這個session_ID的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給伺服器。如果客戶端的瀏覽器禁用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP互動,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的引數,服務端據此來識別使用者。

【cookie的刪除修改】

          Cookie並不提供修改、刪除操作。如果要修改某個Cookie,只需要新建一個同名的Cookie,新增到response中覆蓋原來的Cookie。如果要刪除某個Cookie,只需要新建一個同名的Cookie,並將maxAge設定為0,並新增到response中覆蓋原來的Cookie。注意是0而不是負數。如果maxAge為負數,則表示該Cookie僅在本瀏覽器視窗以及本視窗開啟的子視窗內有效,關閉視窗後該Cookie即失效。maxAge為負數的Cookie,為臨時性Cookie,不會被持久化,不會被寫到Cookie檔案中。Cookie資訊儲存在瀏覽器記憶體中,因此關閉瀏覽器該Cookie就消失了。Cookie預設的maxAge值為–1。

        注意:修改、刪除Cookie時,新建的Cookie除value、maxAge之外的所有屬性,例如name、path、domain等,都要與原Cookie完全一樣。否則,瀏覽器將視為兩個不同的Cookie不予覆蓋,導致修改、刪除失敗。

【兩者區別】

1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上 
2、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮*到安全應當使用session 
3、session會在一定時間內儲存在伺服器上,當訪問增多,會比較佔用你伺服器的效能,考慮到減輕伺服器效能方面,應當使用cookie 
4、單個cookie儲存的數*據不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie 
5、建議將登入資訊等重要資訊存放為session,其他資訊如果需要保留,可以放在cookie中 
6、session儲存在伺服器,客戶端不知道其中的資訊;cookie儲存在客戶端,伺服器能夠知道其中的資訊 
7、session中儲存的是物件,cookie中儲存的是字串 
8、session不能區分路徑,同一個使用者在訪問一個網站期間,所有的session在任何一個地方都可以訪問到,而cookie中如果設定了路徑引數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的


相關推薦

localStorage , SsessionStorage , Cookie , Session聯絡區別

一、Web本地儲存【含義說明】localStorage(長期儲存):瀏覽器關閉後,資料一直存在,不會被清除,即沒有時間限制。seesionStorage(臨時儲存):針對每一個session進行資料儲存。只有當瀏覽器關閉視窗後,資料才會被清除。注意:本地儲存都是不能跨域訪問的

SessionCookie聯絡區別

這裡有一篇資料:https://pan.baidu.com/s/1tjUyL7DwY2ganIfKnz_AJQ 在講session和coookie之前,要先知道會話跟蹤的概念。 在常見的Java Web開發中,我們經常會使用會話跟蹤技術,來記錄某一時段使用者的行為。

cookie,session,localStorage之間的聯絡區別

1、cookie用來儲存使用者相關資料,儲存的位置在使用者本地: php: setcookie("key","value","time"); 讀取cookie:$_COOKIE 刪除cookie:se

Java cookiesession介紹區別

  一、cookie機制和session機制的區別   具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。   同時我們也看到,由於才伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session   機制可能

hashCodeequals的聯絡區別

一、equals方法的作用 1、預設情況(沒有覆蓋equals方法)下equals方法都是呼叫Object類的equals方法,而Object的equals方法主要用於判斷物件的記憶體地址引用是不是同一個地址(是不是同一個物件)。 2 、要是類中覆蓋了equals方法,那麼就要根據具

反捲積、上取樣、上池化的聯絡區別

FCN於反捲積(Deconvolution)、上取樣(UpSampling) https://blog.csdn.net/nijiayan123/article/details/79416764 反捲積(Deconvolution)、上取樣(UNSampling)與上池化(UnPooling

ARM "重定位" "分散載入" 之間的聯絡區別

目前剛剛學完了ARM的裸機部分,有一個問題一直比較困惑:就是 “重定位” 和 “分散載入” 到底是什麼關係? 首先結合S5PV210的啟動方式,iROM(BL0)中的程式執行完之後,將BL1(16K)從SD卡中複製到SRAM中執行,然後把BL2(剩餘的程式)複製到DDR中去執行。把B

java List 、Set 、Map集合聯絡區別

List Map Set 集合 一、基礎概念 1. Collection 和 Map 介面 ​ Java集合框架主要由 Collection和Map兩個根介面及其子介面、實現類組成。 ​ 1) Collection 介面是Set、List、和Queue介面的父介面: ​ Coll

C#中的虛方法、抽象方法、抽象類、介面的聯絡區別

虛方法的關鍵字是virtual抽象方法的關鍵字是abstract重寫都是override 虛方法也可以new虛方法和抽象方法的區別:虛方法:可以在抽象類和非抽象類中定義,可以寫在父類中,在子類中可以被重寫,在定義虛方法時必須實現虛方法 (在定義虛方法時需要寫實現方法的程式碼或者至少

Makefile和Cmake的聯絡區別

CMake是一種跨平臺編譯工具,比make更為高階,使用起來要方便得多。CMake主要是編寫CMakeLists.txt檔案,然後用cmake命令將CMakeLists.txt檔案轉化為make所需要的makefile檔案,最後用make命令編譯原始碼生成可執行程式或共享庫(so(shared ob

Constructor&object 的聯絡區別

constructor&object 的聯絡與區別 建構函式與物件 建構函式是類中的特殊成員函式,用於為物件分配記憶體。它可用於為資料成員提供值。建立物件時將呼叫建構函式。它與類具有相同的名稱。建構函式不返回任何值。 建構函式是生成物件的模板,一個建構函式可以生成多個物件,每個物件都有相同的結構

結構體物件的聯絡區別

結構體與物件的聯絡與區別 1.結構體是一種值型別,而類是引用型別。值型別用於儲存資料的值,引用型別用於儲存對實際資料的引用。 那麼結構體就是當成值來使用的,類則通過引用來對實際資料操作。   2.結構使用棧儲存(Stack Allocation),而類使用堆儲存(Heap Allocatio

C和C++的聯絡區別

面向過程的思路:分析解決問題所需的步驟,用函式把這些步驟依次實現。 面向物件的思路:把構成問題的事務分解為各個物件,建立物件的目的,不是完成一個步驟,而是描述某個事務在解決整個問題步驟中的行為。 從上述描述可以看出,其實面向物件和麵向過程是兩種思考解決問題的方式,其差異主要在於思考的角度。

RNN,LSTM和GRU和word2vec及embedding等的聯絡區別解析。

普通的MLP和CNN都沒有事件維度,可以從RNN開始引入了事件維度,這在理解上給我們帶來了一些困難,筆者為了避免遺忘,將這種區別和特點記錄如下。 (沒時間畫圖,就看文字吧,寫的比較簡單。。。) 資料 https://zhuanlan.zhihu.com/p/36455374 這

一級域名(頂級域名),二級域名,主域名,次域名聯絡區別及域名帶不帶www的區別

相關參考文件 域名概念: (英語:Domain Name),簡稱域名、網域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位(有時也指地理位置)。 頂級域名(也叫一級域名,即倒數第一個點的右邊): ***通用頂級域*

資料結構中 線性表,棧,佇列,演算法之間的聯絡區別

一。連結串列為什麼需要         在程式中,經常需要將一種(通常是同為某個型別的)資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們,傳進傳出函式等。一組元素可能發生變化(像增加或刪除元素。)      

Linux中檔案描述符fb和檔案指標FILE*的聯絡區別

檔案描述符: linux中,當一個程序開啟一個檔案或者是建立一個新檔案時,核心向程序返回一個檔案描述符來標示該檔案。 檔案描述符是一個非負整數,實際上它是一個索引,指向核心為程序所維護的一個檔案記錄表。 任何程式執行起來都會開啟三個預設的流,標準輸入流,標準輸出流,標準錯誤流通

spring、springMvc、springBoot和springCloud的聯絡區別

spring和springMvc: 1. spring是一個一站式的輕量級的java開發框架,核心是控制反轉(IOC)和麵向切面(AOP),針對於開發的WEB層(springMvc)、業務層(Ioc)、持久層(jdbcTemplate)等都提供了多種配置解決方案; 2. springMv

Hadoop和Spark聯絡區別

轉自:https://blog.csdn.net/vaychen/article/details/83578527      博主講解很形象,建議hadoop,spark學完後在看一遍 談到大資料,相信大家對Hadoop和Apache Spark這兩個名字並不陌生。

靜態方法和例項方法聯絡區別

1、呼叫方式上 靜態方法依賴於類,通過類.靜態方法呼叫;例項方法依賴於類的物件,需要建立物件後,物件.例項方法使用 2、使用上 例項方法內部不能定義靜態變數,會出現編譯錯誤;例項方法可以直接呼叫靜態方法;靜態方法內部可以定義和使用例項變數,靜態方法無法直接呼叫例項方法(