1. 程式人生 > >http相關的session及cookie的工作原理與身份認證

http相關的session及cookie的工作原理與身份認證

型別選原創是有點慚愧

其實是我看了這篇文章的總結:http://blog.csdn.net/kgd1120/article/details/2159458

寫得很好,就是略長,後面java的httpsession我就沒看了

正題:

經常上98什麼的時候,發現只要不點退出,直接關閉瀏覽器,下次開啟還是登入狀態。(這和記住密碼不一樣,記住密碼是瀏覽器的功能,還是需要再登入的)

而淘寶人人等一些網站,基本上是下次開啟就是退出狀態了。

一直對這個比較迷惑,今天終於想到去查了一下,看了上面提到的文章,解了大惑。

下文中所謂的身份認證是指登入後,認證的有效時間內,如何識別有效的身份。

首先,是幾個概念:

session:

是伺服器端為每一個訪問使用者儲存的一系列狀態資料。一般身份認證的資訊可以存在session中。

不同的伺服器端語言對session有自己的實現。文首提到的文章有個很好的比喻,session就相當於會員卡,每次訪問提供session標識(cookie或者url引數),就可以訪問session儲存的一些資訊。伺服器端程式設計中的session變數就屬此範圍。

伺服器一般不主動的刪除這個session,除非設定了過期時間。(淘寶等網站應該是這種情況,為安全考慮;比如人離電腦一段時間)。session並不會因為瀏覽器的關閉而刪除資料,除非使用指令碼在關閉瀏覽器是傳送刪除session的請求,因為伺服器端根本無從知道客戶端的狀態,這是http協議的侷限。

cookie:是瀏覽器中儲存的點值對,這個概念很簡單。理論上cookie也能儲存任意的資料,不單是用來認證session,事實上很多網站也是這麼做的(比如,無需登入的“最近瀏覽”功能)

文中同樣有個比喻,cookie就像一張打孔的游泳卡,用來在客戶端保持狀態。

而在上述的身份驗證的例子中就是拿cookie來做session token的東西(session也可以通過url重寫來認證),每次提交這個cookie到伺服器來認證身份,這樣,只要不顯式的呼叫退出操作,只要每次傳送這個cookie,就可以自動的通過身份認證。cookie也是有過期時間的。如果不設定過期時間,則在關閉瀏覽器時銷燬該cookie,稱為會話cookie。(會話cookie:ie的情況是使用選單->檔案->新建視窗來建立的視窗都共享cookie,若新開程序,則不共享;而firefox是同一視窗新開標籤共享cookie,新開視窗也共享。((我電腦上的firefox是這樣。。不知道是不是因為裝了什麼,真奇怪))相信大家用ie上網都有注意到這現象:登入一些網站,ctrl-n新開視窗,會保持登入狀態,新開程序,則不保持。)這種身份認證的方法不太安全,因為它只認cookie,完全可以被拷貝修改到其他電腦,當然也可以考慮加上其他如ip等資訊來加強。

淘寶等網站使用的就是會話cookie,關閉後自動銷燬。

總結一下,身份認證中,session可以用來儲存身份資訊,可以通過認證session來認證身份。

伺服器端session是語言實現的,如不設定過期,不會主動刪除。這意味著使用者若不主動退出,可以一直通過session token來保持登入狀態。

cookie是認證session的一種手段,若不設定過期時間,關閉瀏覽器自動銷燬;否則可以在有效期內使用。98等論壇就是使用cookie保持登入(伺服器端不設定過期,或者設定成和cookie過期時間相同,因為保持session會佔用伺服器資源。)

ps:不清楚的請參考文首原文。。

http://blog.csdn.net/kgd1120/article/details/2159458

這篇也可以參考:

http://bettereveryday.iteye.com/blog/1108452