目錄
- Cookie
- Session
- 什麼是Session?
- 關於Session
- Session的傳遞方式
- Application
Cookie
- 本身用於瀏覽器和服務端通訊
- 存放在客戶端中,可以設置過期時間
缺點:
- 大小限制,4k
- 不確定性:用戶可以刪除cookie或禁用
- 安全風險:可僞造修改
推薦閱讀:cookie localStorage sessionStorage
Session
什麼是Session?
當用戶通過瀏覽器訪問服務器時,服務器本身並不知道是誰來訪問的(http
協議是無狀態的)。
於是,服務器就給每個訪問者進行臨時編號(即,給每個訪問者創建對應的session
會話)。
與此同時,爲了方便一段時間內訪問者都可以對服務器“自由訪問”,服務器就把臨時編號(sessionID
)傳給訪問者(存儲在客戶端的cookie
中,當瀏覽器關閉時釋放;或跟在URL
地址後面)
在這段時間內,需要進行請求驗證時,服務器就可以直接拿着訪問者的臨時編號進行驗證。
注意: 這個瀏覽器指的是瀏覽器窗口,或者是瀏覽器的子窗口。意思就是,只允許當前這個session
對應的瀏覽器訪問,就算是在同一個機器上新啓的瀏覽器也是無法訪問的。而另外一個瀏覽器也需要記錄session
的話,就會再啓一個屬於自己的session
關於Session
- 每個用戶訪問服務器時,都會在服務端創建一個相對應的
Session
,分配的SessionID
是唯一的,用來標識不同的用戶 - 爲了獲取更快的存儲速度,服務端可以把
Session
保存在內存中(當然也可以存儲在文件中,數據庫中),因此放在Session
中的信息應該精簡,避免內容過於複雜,當大量用戶訪問時可能導致內存溢出 Session
是具有生命週期的,當超過了這段時間,Session
就會失效Session
生成後,只要用戶繼續訪問,服務器就會更新該Session
的最後訪問時間,並維護該Session
- 當用戶訪問過多時,隨之創建的
Session
也會變多,爲了防止內存溢出的問題,服務器會把長時間沒有訪問的Session
給刪除掉
Session的傳遞方式
- 通過
Cookie
實現
把sessionID
放在Cookie
裏面;
臨時Cookie
會在當前瀏覽器關閉時消失,而Session
也是當瀏覽器關閉時消失的。因此可以用臨時Cookie
存放,而且保存的sessionID
不會重複,因爲Cookie
裏存儲的是鍵值對,是獨一無二的,相同的會被覆蓋 - 通過
URL
重寫實現
如果瀏覽器不支持Cookie
的時候,就可以使用URL
重寫的方式實現
即,在url
地址後面追加sessionID
- 使用
HTTP
請求頭來傳輸
比如標準的Authorization
,也可以自定義,如X-Auth-SessionID
等。但是這個請求頭瀏覽器不會像cookie
一樣自動攜帶,需要手工處理。
Application
Application
用於保存所有用戶的公共數據信息,存放在服務端中Application
適用於任何大小的數據Application
保存期貫穿於整個應用程序的生命期Application
適用於所有用戶,是所有用戶公用一個
注意: 當網站訪問量大的時候會產生嚴重的性能瓶頸.因此最好不要用此對象保存大的數據集合
舉例: 在網頁上顯示在線人數