1. 程式人生 > >Web基礎——cookie和session的生存之道

Web基礎——cookie和session的生存之道

cookie和session用於實現會話跟蹤

http協議是無狀態的,即伺服器無法知道當前會話是否之前訪問過伺服器。但是我們開發網站的時候,希望提供個性化的服務,即針對不同的使用者(瀏覽器)提供不同的資料和服務,單純的http協議顯然是無法實現這一點的,那麼我們就需要使用到會話跟蹤的技術。

會話跟蹤技術的實現有兩種方式,一種就是通過session和cookie,另一種是url重寫技術(就是在url中加入jsessionid來跟蹤session)

Session

Session中儲存了每個會話的資訊,比如登入狀態、賬號、購物車啥的。但是單純的session是無法達到個性化服務的:因為http協議的無狀態性,當用戶訪問伺服器進行了操作後(比如登入),下一次再訪問時客戶端無法再跟蹤到之前的會話資訊。

那麼cookie的作用就體現出來了:

Cookie

接著前面的問題,每一次的會話會產生一個session,每個session有一個獨一的sessionid,那麼我們可以通過儲存這個sessionid,在下一次訪問的時候,我們就使用這個sessionid來找到之前的會話,那麼不就是可以實現會話跟蹤了嗎。Cookie的作用就是這樣,當用戶第一次訪問伺服器時,伺服器會在響應報文中新增一個set-cookie欄位將當前會話的sessionid傳給客戶端(set-cookie:jsessionid:…),客戶端(瀏覽器)接收到response後,將cookie鍵值對(“jsession”,value)存入記憶體中,下一次再訪問該伺服器時,即傳入對應的cookie內容,那麼伺服器就可以根據sessionid找到之前的session啦,這樣即完成了會話的跟蹤。

 

 

 

Cookie中幾個比較重要的引數

key,              鍵

value='',         值

max_age=None,     超時時間 秒   值若為-1:瀏覽器關閉時cookie即失效0:不會儲存cookie    值若大於瀏覽器被關閉的時間  則cookie會被存入檔案中   下次訪問對應伺服器時即加入瀏覽器記憶體使用

expires=None,     超時時間時間戳,到expires設定的時間時失效

path='/',         Cookie生效的路徑,/ 表示根路徑,特殊的:跟路徑的cookie可以被任何url的頁面訪問

domain=None,      Cookie生效的域名

secure=False,     https傳輸

httponly=False    只能http協議傳輸,無法被JavaScript獲取(不是絕對,底層抓包可以獲取到也可以被覆蓋)

 

session和cookie的區別

儲存位置:session保存於伺服器端,cookie保存於客戶端記憶體或檔案中。

記憶體cookie和持久cookie

如果設定了有意義的cookie過期時間,那麼cookie會被儲存到硬碟(win7ie--C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies ,chrome: C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Cache),

否則,cookie儲存在記憶體。