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儲存在記憶體。