.NET1.1無Cookie SessionID重寫
發表于:2007-09-07來源:作者:點擊數:
標簽:
瀏覽器的會話使用存儲在 SessionID 屬性中的唯一標識符進行標識。會話 ID 使 ASP.NET 應用程序能夠將特定的瀏覽器與 Web 服務器 上相關的會話數據和信息相關聯。會話 ID 的值在瀏覽器和 Web 服務器間通過 Cookie 進行傳輸,如果指定了無 Cookie 會話,則通過
瀏覽器的會話使用存儲在 SessionID 屬性中的唯一標識符進行標識。會話 ID 使 ASP.NET 應用程序能夠將特定的瀏覽器與 Web
服務器上相關的會話數據和信息相關聯。會話 ID 的值在瀏覽器和 Web 服務器間通過 Cookie 進行傳輸,如果指定了無 Cookie 會話,則通過 URL 進行傳輸。
ASP.NET 通過自動在頁的 URL 中插入唯一的會話 ID 來保持無 Cookie 會話狀態。例如,下面的 URL 已被 ASP.NET 修改,以包含唯一的會話 ID lit3py55t21z5v55vlm25s55:
http://www.example.com/s(lit3py55t21z5v55vlm25s55)/orderform.aspx
如果一個包含無 Cookie SessionID 的鏈接被多個瀏覽器共享時(可能通過搜索引擎或其他程序),此行為可能導致對會話數據的意外共享??梢酝ㄟ^禁用會話標識符的回收來降低多個客戶端共享會話數據的可能性。為此,將 sessionState 配置元素的 regenerateExpiredSessionId 屬性設置為 true。這樣,在使用已過期的會話 ID 發起無 Cookie 會話請求時,將生成一個新的會話 ID。
——摘自 MSDN
.NET2.0中我們已可以通過重寫SessionIDManager 類來改變SessionID 的生成機制和驗證方法來防止會話數據的意外共享(即出現多個瀏覽器被識別為同一個會話,共用一個Session),可在.NET1.1中卻沒有相關的類讓我們改變SessionID 的生成機制(封裝死了),但受一篇文章的啟發,我們可以在SessionID 生成之后對它進行處理。文章是老外寫的,由于本人閱讀能力有限,偶可沒時間去看一大版唧唧歪歪的鷹文,直接下了代碼來看。還好代碼不算多,思路也很清晰,大概了解了他實現重寫SessionID的原理,我改了下在無Cookie 會話中完美實現了。
|
原文轉自:http://www.kjueaiud.com