session
- .由于http協(xié)議是無狀態(tài)的協(xié)議,所以服務端需要記錄用戶的狀態(tài)時备韧,就需要用有種機制來識別具體的用戶劫樟,這個機制就是session。
1.典型的場景比如購物車织堂,當你點擊下單按鈕時叠艳,由于http協(xié)議無狀態(tài),它并不知道是哪一個用戶操作的易阳,所以服務端為特定的用戶創(chuàng)建特定的session虑绵,用于標識這個用戶,并且跟蹤用戶闽烙,這樣才知道購物車里面的內容翅睛,這個session是保存在服務端的声搁,有唯一的標識。 - .在服務端保存的session的方法很多捕发,內存疏旨、數(shù)據(jù)庫、文件都可以扎酷,集群的時候也要考慮session的轉移檐涝,在大型的網(wǎng)站,一般會有專門的session服務器集群法挨,用來保存用戶會話谁榜,這個時候的session信息都是放在內存的,使用一些緩存服務比如Memcached之類來放session凡纳。
session創(chuàng)建于服務器端窃植,保存于服務器,維護于服務器荐糜,每創(chuàng)建一個新的session巷怜,服務器端都會分配一個唯一ID,并且把這個ID保存到客戶端的Cookie中暴氏,保存的形式是以JSESSIONID來保存的延塑。
cookie
服務器端是如何識別特定的客戶端呢?
- .Cookie登場答渔,每次http請求的時候关带,客戶端都會發(fā)送相應的cookie信息到服務端。實際上大多數(shù)的應用都是用cookie來實現(xiàn)session的跟蹤沼撕,第一次創(chuàng)建session的時候宋雏,服務端會在http協(xié)議中告訴客戶端,需要在cookie里面記錄一個session ID端朵,以后每次請求都會把這個ID發(fā)送到服務器,此時就知道對方的身份
有人問燃箭,如果客戶端的瀏覽器禁用來cookie怎么辦冲呢?一般這種情況下,會使用一種叫做URL重寫的技術來進行回話更總招狸,既每次http交互敬拓,URL后面都會被附加上一個諸如sid=xxxx這樣的參數(shù),服務端據(jù)此來識別用戶 - .cookie是瀏覽器保存信息的一種方式裙戏,可以理解為一個文件乘凸,保存在客戶端,服務器可以通過響應瀏覽器的set-cookie的標頭累榜,設置cookie的信息营勤,保存在客戶端灵嫌,你可以給這個文件設置一個期限,這個期限葛作,不會因為瀏覽器的關閉而消失寿羞,其實大家應該對這個效果并不陌生,很多網(wǎng)購的網(wǎng)站都是這樣做的赂蠢,即使你沒有買東西绪穆,它也會記住的喜好,會優(yōu)先推薦你喜歡的東西
- .cookie其實還可以在一些方便用戶的場景下虱岂,設想你登錄過一個網(wǎng)站玖院,下次登陸的時候不想在輸入帳號了,怎么辦第岖?這個信息可以寫在cookie中难菌,訪問網(wǎng)站的時候,網(wǎng)站頁面的腳本可以讀取這個信息绍傲,自動幫你把用戶名給填寫扔傅,能夠方便用戶,這個也是cookie的由來烫饼,但也因此cookie存在一定的安全隱患
總結
- .seesion是在服務端保存的一個數(shù)據(jù)結構猎塞,用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群杠纵、數(shù)據(jù)庫荠耽、文件中
- .cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息比藻,也是實現(xiàn)session的一種方式