我們先要清楚一點,我們訪問網站用的協議是HTTP協議,而HTTP協議本身就是無狀態的協議。什麼是無狀態呢?通俗說就是同一個訪客向同一站點發出了多個請求,站點伺服器預設情況下無法判斷這些請求是出自同一個訪客的。那就會帶來一些問題了,比如使用者登入,伺服器如何知道使用者是否登入了呢?所以必須要對會話進行管理,要保證伺服器能辨別使用者。
在Web中,使用者的標識與狀態管理我們稱之為“會話管理”,會話管理是保持使用者與伺服器之間的互動過程。
在Web中的會話管理技術主要有兩種:
客戶端會話:Cookie
服務端會話:Session
Cookie是儲存在客戶端(瀏覽器)的,Session是儲存在伺服器記憶體、檔案、資料庫等中的,而Session預設是基於Cookie技術的。
Session之所以能正常使用是因為Session有一個全域性唯一的識別符號,透過這個識別符號伺服器才能找到對應的Session進行操作。這個識別符號就是SessionID,當瀏覽器第一次請求伺服器時,伺服器生成了Session並將SessionID儲存在客戶端Cookie中,以後使用者發出請求時都會把這個Cookie附加到請求頭資訊中一起傳遞給伺服器,伺服器獲取到了這個SessionID就能找到對應的Session了。
所以說,如果瀏覽器禁用了Cookie,那此時SessionID就無法種植與傳遞,會導致使用者每發出一個請求都被當成是新使用者。這種情況下伺服器端該如何標識使用者呢?
其實很簡單,伺服器端只要將SessionID透過其它技術傳遞到客戶端,客戶端後續請求時繼續把SessionID作為請求引數傳遞給伺服器端解析即可。
舉例說明一下,假設客戶端禁用了Cookie,此時執行登入操作,登入成功後伺服器端只需要在重定向的URL後面附加一個GET引數(引數值就是SessionID),然後所有的站內連結都把這個GET引數帶上,這樣伺服器透過獲取GET引數就能得到SessionID,自然也就找到了對應的Session,以此來實現使用者標識。
我們先要清楚一點,我們訪問網站用的協議是HTTP協議,而HTTP協議本身就是無狀態的協議。什麼是無狀態呢?通俗說就是同一個訪客向同一站點發出了多個請求,站點伺服器預設情況下無法判斷這些請求是出自同一個訪客的。那就會帶來一些問題了,比如使用者登入,伺服器如何知道使用者是否登入了呢?所以必須要對會話進行管理,要保證伺服器能辨別使用者。
在Web中,使用者的標識與狀態管理我們稱之為“會話管理”,會話管理是保持使用者與伺服器之間的互動過程。
在Web中的會話管理技術主要有兩種:
客戶端會話:Cookie
服務端會話:Session
Cookie是儲存在客戶端(瀏覽器)的,Session是儲存在伺服器記憶體、檔案、資料庫等中的,而Session預設是基於Cookie技術的。
Session之所以能正常使用是因為Session有一個全域性唯一的識別符號,透過這個識別符號伺服器才能找到對應的Session進行操作。這個識別符號就是SessionID,當瀏覽器第一次請求伺服器時,伺服器生成了Session並將SessionID儲存在客戶端Cookie中,以後使用者發出請求時都會把這個Cookie附加到請求頭資訊中一起傳遞給伺服器,伺服器獲取到了這個SessionID就能找到對應的Session了。
所以說,如果瀏覽器禁用了Cookie,那此時SessionID就無法種植與傳遞,會導致使用者每發出一個請求都被當成是新使用者。這種情況下伺服器端該如何標識使用者呢?
其實很簡單,伺服器端只要將SessionID透過其它技術傳遞到客戶端,客戶端後續請求時繼續把SessionID作為請求引數傳遞給伺服器端解析即可。
舉例說明一下,假設客戶端禁用了Cookie,此時執行登入操作,登入成功後伺服器端只需要在重定向的URL後面附加一個GET引數(引數值就是SessionID),然後所有的站內連結都把這個GET引數帶上,這樣伺服器透過獲取GET引數就能得到SessionID,自然也就找到了對應的Session,以此來實現使用者標識。