當用戶第一次訪問您網站上的.NET URL(如.aspx頁面,但不是.html或其他靜態文件)時,新會話開始。該會話持續到它超時或應用程序被終止(重新啓動/崩潰/再循環)。默認的.NET超時是20分鐘;因此只要用戶持續點擊.aspx頁面並且中斷時間不超過20分鐘,會話就會持續。
在此期間,您可以將信息存儲在與該用戶相關的Session對象中。它本質上是一個散列表,您可以使用您定義鍵的對象填充它。在你的情況下,你正在使用Session [「data」],但是你可以使用任何你想要的鍵,真的。
然而,會話以及存儲在Session哈希表中的數據非常脆弱(請參閱上述所有方法)。你不應該依賴它來保留任何重要的東西,例如在Session_Start中不能輕易重建的東西。所以它確實服務於兩個角色:維護狀態(所以你知道它在每個頁面中仍然是同一個用戶);並作爲用戶特定的緩存,您可以將數據保存在內存中以更快地完成任務。
Session_Start每個會話只運行一次 - 根據定義。如果您需要通過多個會話識別單個用戶,則需要使用更持久的方法,例如設置自己的Cookie,並且將來可能會失效。你可以在這樣一個cookie中放入一個ID,讓你知道這是用戶12345(事實上,Session_Start只是尋找你的「永久」cookie並將你的關於該現有用戶的數據連接到這個新會話的地方)。
如果要存儲有關多個會話中存活的用戶的數據,則必須將該數據存儲在更永久的位置 - 數據庫是最明顯的解決方案。當他們回來時,您可以在Session散列表中緩存一些數據 - 而Session_Start也是這樣做的地方。希望這可以幫助。
因此,如果用戶保持活躍,直到然後用戶停止使用應用程序的session_start將開始一次運行? – feronovak 2011-02-01 00:28:38