Session_End無法啓動 - 如果您沒有使用InProc會話,則它根本不會啓動。如果您的應用程序再次回收或死亡,它不會觸發。
您最好的選擇是在一個共享的方法,這個代碼,您可以從許多地方撥打:
- 在你LoginStatus的控制,你可以設置LoggingOut事件 - 打電話給你的方法有處理人誰明智地註銷。
- 如果您在Session_End事件中使用InProc會話,但請確保檢查是否已經註銷(如您所見)。
- 如果您不使用InProc會話,則需要獲得更多的創意。也許看看有一個事件會不時發生(可能是在Session_Start中不管發生什麼事情),並清除那些上次活動時間比會話超時更早的用戶(如Greg所述)。
Unforunately的Membership class爲您提供了一些有用的信息,但不是所有的人:
GetNumberOfUsersOnline
這將「獲取用戶數當前訪問的應用程序。「 - 偉大的,但唯一的方法,將讓用戶可以:
GetAllUsers // Gets all the users from the storage provider (can be paged)
FindUsersByName
FindUsersByEmail
可悲的是這些都沒有的屬性只返回‘活躍用戶’按計數
看的MembershipUser成員。沒有「IsOnline」屬性 - 只有LastLogonDate和LastActivtyDate - 由於網絡的連接性,這可能與您將要獲得的一樣好。