你好,是我琉憶。
今天我們講一講Session與Cookie的區別
1、Session對象
上一節簡單介紹了Cookie,接下來簡單介紹Session。Session和Cookie都是會話管理技術的一種。可能你會奇怪記住用戶的信息有Cookie就夠了,為什么還需要Session?那么我們帶着這個疑問一起來看看Session,以及對比兩者的區別。
2、什么是Session?
Session的翻譯有:一場; 一節; 一段時間; (法庭的)開庭,開庭期; (議會等的)會議,會期;學年; (酒吧中)演奏會(尤指演奏愛爾蘭音樂)等等多種意思。一般我們拿來指代“會議”或者“會期”的意思。但是實際我們說的時候都統一用英文名稱來稱呼這種技術,它和Cookie一樣都算是計算機術語。
Session對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web頁時,如果該用戶還沒有會話,則Web服務器將自動創建一個 Session對象。當會話過期或被放棄后,服務器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在Session對象中。
當用戶登錄或訪問一些初始頁面時,服務器會為客戶端分配一個 SessionID。SessionID 是一個加密的隨機數字,在 Session 的生命周期中保存在客戶端。它可以保存在用戶機器的 Cookie 中,也可以通過 URL 在網絡中進行傳輸。用戶通過 SessionID 可以注冊一些特殊的變量,稱為會話變量,這些變量的數據保存在服務器端。在一次特定的網站連接中,如果客戶端可以通過 Cookie 或 URL 找到SessionID,那么服務器就可以根據客戶端傳來的 SessionID 訪問會話保存在服務器端的會話變量。Session 的生命周期只在一次特定的網站連接中有效,當關閉瀏覽器后,Session 會自動失效,之前注冊的會話變量也不能再使用。
【如果你還沒有關注我的話,可以點點關注,下次更新精彩博文我通知你。】
3、為什么需要Session
需要Session的主要原因是它存儲更安全,一般用戶的登錄狀態都是使用Session來存,這樣在每個頁面之間切換時,我們都可以追蹤到當前用戶的信息,顯示用戶的登錄狀態。那么為什么Session存儲更安全呢?原因是因為它的文件存儲在服務器端,用戶是沒有權限操作服務器的,除了服務器管理員有權限操作外。這樣就可以避免非法用戶竊取Session中的數據,從而保證了數據的安全性。反而客戶端的電腦有被黑客入侵竊取文件的風險,或者是別的用戶使用該客戶端電腦時,直接竊取Cookie文件的風險,導致數據泄露的問題。
4、Session使用在哪些場合?
由於Session數據是存儲在服務器端的,安全性比Cookie要高。那么數據安全性要求比較高,比較私密的情況下都可以使用Session。
那么一般我們會用Session存儲用戶的狀態,方便在頁面之間切換時依舊顯示登錄狀態。還可以作為緩存,緩存用戶購物車數據。為什么購物車的數據不適用Cookie呢?原因很簡單,如果用Cookie實現購物車的存儲功能,當用戶在A電腦放了3件商品到購物車中,用戶在A電腦看購物車時3件商品都是可以看到的。但是當用戶在B電腦登錄賬號查看購物車時,會發現購物車中一件商品都沒有。如果使用Session就不存在這種問題。那么為什么會出現這種情況呢?原因就在於存儲數據的方式不同!首先Cookie是存儲數據在客戶端,Session是存儲數據在服務端。那么當用戶在A電腦存儲數據到購物車時,如果存到Cookie中,就相當於把數據存儲到了A電腦中,在B電腦自然讀取不到該Cookie的數據。反而Session存儲商品在服務器時,無論你換哪台電腦,都是可以直接從服務器獲取該用戶的信息展示的。
所以綜合下來,總結就是Cookie存儲數據在本地,安全性要求不高、不要求數據共享都可以使用它;Session存儲數據在服務器,數據安全性要求高、需要共享數據,則可以選擇Session。
5、Cookie和Seesion有什么區別?
簡單介紹完Cookie和Session之后,我相信你一定有很多疑問,Cookie和Session到底有什么區別?我們簡單從多個角度來進行對比。對比結果如下:
那么對比下來,最關鍵的是,如果存儲的數據安全性要求比較高,比較私密,那么數據就存儲在Session中,如果安全性要求不那么高就存儲在Cookie中。原因是Cookie存儲在本地,黑客可以在通訊過程中竊取Cookie解密查看存儲信息。如果信息存儲在Session中,Session的數據是緩存在服務器端的,黑客是沒有權限操作服務器,對Session文件進行破解的,只能獲取到SessionID。而SessionID是服務端程序獲取Session數據的唯一標識。
6、我寫的書開始預售了!
最近正在寫一本《ASP.NET Web動態網站》開發的書,預計2月底寫完,敬請期待~
預售網址:http://www.71muke.com/course/info/99
更多編程知識獲取,可以關注公眾號:琉憶編程庫。