SSO專題1--基本概念

這些都是基礎知識,不過有必要做深入瞭解。先簡單介紹一下。

定義:

cookie定義:當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇,都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的 Cookie 資料,有的話,就會依據 Cookie裏的內容來判斷使用者,送出特定的網頁內容給你。 Cookie 的使用很普遍,許多有提供個人化服務的網站,都是利用 Cookie來辨認使用者,以方便送出使用者量身定做的內容,像是 Web 接口的免費 email 網站,都要用到 Cookie。


session定義:

具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。
需要注意的是,一個Session的概念需要包括特定的客戶端,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器建立連接時所處的Session是兩個不同的Session。
Session 的作用就是它在 Web服務器上保持用戶的狀態信息供在任何時間從任何頁訪問


cookie機制。

正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由瀏覽器按照一定的原則在後臺自動發送給服務器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器。

cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設置過期時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。會話cookie一般不存儲在硬盤上而是保存在內存裏,當然這種行爲並不是規範規定的。若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存裏的cookie,不同的瀏覽器有不同的處理方式

session機制。
session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。當程序需要爲某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),如果已包含則說明以前已經爲此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則爲此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人爲的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴服務器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器。比如:


cookie 和session 的區別:

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session

3、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE

4、單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。

5、所以個人建議:
   將登陸信息等重要信息存放爲SESSION
   其他信息如果需要保留,可以放在COOKIE中


要了解Session首先要知道一個概念:Session的銷燬只有兩種情況:第一:session調用了 session.invalidate()方法. 第二:前後兩次請求超出了session指定的生命週期時間. 其中Session的生命週期時間可以在web.xml配置. 默認30分鐘 在web.xml可以做如下配置:     
最典型的就是利用 SessionListener  的sessionDestroyed方法 來記錄用戶非正常退出的時間. 用戶在訪問某個網站的時候(目前的銀行網站都有此功能) 顯示了用戶的最後登錄時間. 此時間如何獲取. 在這裏分兩種情況
如果用戶按"退出" 按鈕那就好說了. 跳轉到action中.記錄下用戶退出的時間. 存儲到持久層中如果用戶非正常退出, 在沒有配置Session的情況下 默認會在30分鐘後調用sessionDestroyed 那麼我們同樣可以在此獲取用戶退出的時間,在sessionDestroyed 調用業務邏輯完成我們想要實現的功能

有關Session第2個典型的應用就是Session中存儲了用戶的登錄信息. 那麼就可以訪問用戶權限的一些頁面.

有關這個應用要注意一個問題: 存儲到session中的 User對象一定要實現Serializable接口. Serializable的作用可以參考相關資料.


正常情況下當我們做測試的時候關閉Tomcat 大家會在  Tomcat安裝目錄\work\Catalina\localhost\項目名 文件夾下面看到有一個 SESSIONS.ser 的文件.此文件就是Session在Tomcat停止的時候 持久化到硬盤中的文件. 所有當前訪問的用戶Session都存儲到此文件中. Tomcat啓動成功後.SESSIONS.ser  又會反序列化到內存中,所以啓動成功後此文件就消失了. 所以正常情況下 從啓Tomcat用戶是不需要登錄的. 注意有個前提.就是存儲到Session裏面的user對象所對應的User類必須要序列化纔可以

發佈了39 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章