SessionID 的本質

1、客戶端用cookie保存了sessionID

 

客戶端用cookie保存了sessionID,當咱們請求服務器的時候,會把這個sessionID一塊兒發給服務器,服務器會到內存中搜索對應的 sessionID,若是找到了對應的 sessionID,說明咱們處於登陸狀態,有相應的權限;若是沒有找到對應的sessionID,這說明:要麼是咱們把瀏覽器關掉了(後面會說明爲什 麼),要麼session超時了(沒有請求服務器超過20分鐘),session被服務器清除了,則服務器會給你分配一個新的sessionID。你得重 新登陸並把這個新的sessionID保存在cookie中。 
在沒有把瀏覽器關掉的時候(這個時候假如已經把sessionID保存在 cookie中了)這個sessionID會一直保存在瀏覽器中,每次請求的時候都會把這個sessionID提交到服務器,因此服務器認爲咱們是登陸 的;固然,若是太長時間沒有請求服務器,服務器會認爲咱們已經因此把瀏覽器關掉了,這個時候服務器會把該sessionID從內存中清除掉,這個時候若是 咱們再去請求服務器,sessionID已經不存在了,因此服務器並無在內存中找到對應的 sessionID,因此會再產生一個新的sessionID,這個時候通常咱們又要再登陸一次。 html

2、客戶端沒有用cookie保存sessionID

 

這 個時候若是咱們請求服務器,由於沒有提交sessionID上來,服務器會認爲你是一個全新的請求,服務器會給你分配一個新的sessionID,這就是 爲何咱們每次打開一個新的瀏覽器的時候(不管以前咱們有沒有登陸過)都會產生一個新的sessionID(或者是會讓咱們從新登陸)。 
當我 們一旦把瀏覽器關掉後,再打開瀏覽器再請求該頁面,它會讓咱們登陸,這是爲何?咱們明明已經登陸了,並且尚未超時,sessionID確定還在服 務器上的,爲何如今咱們又要再一次登陸呢?這是由於咱們關掉瀏覽再請求的時候,咱們提交的信息沒有把剛纔的sessionID一塊兒提交到服務器,因此服 務器不知道咱們是同一我的,因此這時服務器又爲咱們分配一個新的sessionID,打個比方:瀏覽器就好像一個要去銀行開戶的人,而服務器就比如銀行, 這個要去銀行開戶的人這個時候顯然沒有賬號(sessionID),因此到銀行後,銀行工做人員問有沒有賬號,他說沒有,這個時候銀行就會爲他開通一個賬 號。因此能夠這麼說,每次打開一個新的瀏覽器去請求的一個頁面的時候,服務器都會認爲,這是一個新的請求,他爲你分配一個新的sessionID。瀏覽器

轉自:http://www.cnblogs.com/japanbbq/archive/2011/09/01/2161650.html服務器

分類: JavaEE
相關文章
相關標籤/搜索