SESSION与COOKIE的区别
作者:郭無心
鏈接:https://www.zhihu.com/question/19786827/answer/66706108
來源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)。
COOKIE和SESSION有什么區(qū)別?
cookie保存在客戶端,session保存在服務(wù)器端,
cookie目的可以跟蹤會話,也可以保存用戶喜好或者保存用戶名密碼
session用來跟蹤會話
①當(dāng)我們登錄網(wǎng)站勾選保存用戶名和密碼的時候,一般保存的都是cookie,將用戶名和密碼的cookie保存到硬盤中,這樣再次登錄的時候瀏覽器直接將cookie發(fā)送到服務(wù)端驗證,直接username和password保存到客戶端,當(dāng)然這樣不安全,瀏覽器也可以加密解密這樣做,每個瀏覽器都可以有自己的加密解密方式,這樣方便了用戶,再比如用戶喜歡的網(wǎng)頁背景色,比如QQ空間的背景,這些信息也是可以通過cookie保存到客戶端的,這樣登錄之后直接瀏覽器直接就可以拿到相應(yīng)的偏好設(shè)置。
②跟蹤會話,比如某些網(wǎng)站中網(wǎng)頁有不同的訪問權(quán)限,有只能登錄的用戶訪問的網(wǎng)頁或者用戶級別不同不能訪問的,但是http請求是無狀態(tài)的,每次訪問服務(wù)端是不知道是否是登錄用戶,很自然的想到在http請求報文中加入登錄標識就可以了,這個登錄標識就可以是cookie,這樣的cookie服務(wù)端要保存有所有登錄用戶的cookie,這樣請求報文來了之后拿到登錄標識cookie,在服務(wù)端進行比較久可以了。再比如購物網(wǎng)站,多次點擊添加商品到購物車客戶端很容易知道哪些物品在購物車中,但是服務(wù)端怎么知道每次添加的物品放到哪個登錄用戶的購物車中呢?也需要請求報文中帶著cookie才行(在不登陸的情況下京東也是可以不斷添加商品的,推測應(yīng)該是登錄的時候一并創(chuàng)建cookie并且發(fā)送物品信息),這些cookie都是為了跟蹤會話用的,所以客戶端有,服務(wù)端也有,并且服務(wù)端有全部的會話cookie。
后面衍生出session技術(shù),session技術(shù)是要使用到cookie的,之所以出現(xiàn)session技術(shù),主要是為了安全。
http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時,服務(wù)器都打開新的會話,而且服務(wù)器也不會自動維護客戶的上下文信息,那么要怎么才能實現(xiàn)網(wǎng)上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變量的值保存在服務(wù)器端,通過SessionID來區(qū)分不同的客戶,session是以cookie或URL重寫為基礎(chǔ)的,默認使用cookie來實現(xiàn),系統(tǒng)會創(chuàng)造一個名為JSESSIONID的輸出cookie,我們叫做session cookie,以區(qū)別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲于瀏覽器內(nèi)存中的,并不是寫到硬盤上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當(dāng)我們把瀏覽器的cookie禁止后,web服務(wù)器會采用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到 sessionid=KWJHUG6JJM65HS2K6之類的字符串。
大家請看在HTTP請求報文頭的最后一行有cookie,不過是JSessionID的cookie值
Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23BE13C4C
比如前兩個值,應(yīng)該屬于偏好設(shè)置之類的。
服務(wù)端是怎么知道客戶端的多個請求是隸屬于一個Session呢?注意到后臺的那個jsessionid=5F4771183629C9834F8382E23BE13C4C木有?原來就是通過HTTP請求報文頭的Cookie屬性的jsessionid的值關(guān)聯(lián)起來的?。ó?dāng)然也可以通過重寫URL的方式將會話ID附帶在每個URL的后面哦)。
明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區(qū)別了,網(wǎng)上那些關(guān)于兩者安全性的討論也就一目了然了,session cookie針對某一次會話而言,會話結(jié)束session cookie也就隨著消失了,而persistent cookie只是存在于客戶端硬盤上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如 session cookie安全了。
通常session cookie是不能跨窗口使用的,當(dāng)你新開了一個瀏覽器窗口進入相同頁面時,系統(tǒng)會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把sessionid保存在persistent cookie中,然后在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結(jié)合我們就實現(xiàn)了跨窗口的session tracking(會話跟蹤)。
在一些web開發(fā)的書中,往往只是簡單的把Session和cookie作為兩種并列的http傳送信息的方式,session cookies位于服務(wù)器端,persistent cookie位于客戶端,可是session又是以cookie為基礎(chǔ)的,明白的兩者之間的聯(lián)系和區(qū)別,我們就不難選擇合適的技術(shù)來開發(fā)web service了。
總結(jié)
以上是生活随笔為你收集整理的SESSION与COOKIE的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众宝来质量怎么样 深度解析大众宝来的车
- 下一篇: 时间管理之四象限法则