2009-06-05 78 views

回答

2

使用以下命令:

<configuration> 
    <system.web> 
    <sessionState cookieless="true" 
     regenerateExpiredSessionId="true" /> 
    </system.web> 
</configuration> 

並有citation from MSDN

ASP.NET通過自動插入 唯一的會話ID到頁面的URL保存Cookie會話 狀態。 例如,以下網址已 被ASP.NET修改,以包括 唯一的會話ID lit3py55t21z5v55vlm25s55:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

當ASP.NET發送一個網頁給 瀏覽器,它會修改的任何鏈接通過在鏈接中嵌入會話ID值 來使用與應用相關的 路徑的 頁面。 (與絕對路徑鏈接 路徑不會被修改。)會話狀態 一直保持,只要用戶 以這種方式點擊已修改爲 的鏈接。但是,如果客戶端 重寫了由 應用程序提供的URL,則ASP.NET可能不能通過 來解析會話ID,並且 會將該請求與現有的 會話相關聯。在這種情況下,將爲請求啓動一個新的會話 。

因此,您需要爲新選項卡打開新會話的所有內容都是打開一個不帶會話標識符的URL。
編輯:
和其他用戶提到的,你應該照顧這個'功夫'。如果您在會話中存儲用戶敏感信息 - 請致電secure your authentification cookies

EDIT2: 而且請注意,當您在網址中使用會話密鑰時,用戶可以將其複製併發送給一些朋友。而這個用戶和他的朋友將會分享這個單獨的會話(這將是一個很棒的功能!:))。爲避免這種情況,您可以執行以下操作:
1.在onSessionStart方法中以某種方式添加關聯到用戶(用戶的配置文件,存儲在數據庫中)並在BeginRequest上進行檢查。
2.當引用者爲空或不等於當前域時檢查引薦來源並創建新會話(重定向到無會話url)(但請注意可以手動設置引薦來源)
3.重寫會話ID的生成並關聯它與用戶名和IP/MAC(XOR或類似的東西)。並在會議召開時在舞臺上進行驗證。
4.還有其他的東西讓這個會話密鑰只對當前用戶有效。

+0

使用無cookie會話引入了一個非常可怕的安全問題,我認爲它不應該被使用。 – meandmycode 2009-06-05 10:55:15

1

會話cookie保存在瀏覽器實例可訪問的易失性存儲器中。你需要一個支持你所追求的概念的瀏覽器,而且據我所知,這種瀏覽器不存在。

在ASP.NET中,您可以在不使用會話cookie的情況下維護一個會話,它的真實醜陋,我不會推薦它,但它可能是您實現目標的一種方式。

+0

@Downvoter:請解釋一下嗎? – AnthonyWJones 2009-06-05 14:02:38