簡體   English   中英

如何獲取 Web 應用程序中的活動會話列表?

[英]How to get a list of active sessions in a web application?

我試圖在我的 Web 應用程序中獲取活動會話 ID 的列表。

我試圖在 Global.asax 中管理一個列表。 我在 Session_Start 被觸發時添加會話 ID,並在 Session_End 被觸發時刪除會話 ID。

問題出現在用戶關閉瀏覽器或關閉計算機的情況下。 Session_End 沒有被觸發,並且該列表仍然存在。

有人知道我怎樣才能得到清單?

謝謝!

沒有解決此問題的方法可以避免您注意到的復雜情況。 除非有某種明確的方式來結束用戶的會話 -並且用戶激活它- 知道會話何時結束的唯一方法是允許它過期。

Session_End最終會在會話超時時觸發。 從未看到Session_End被調用的唯一時間是應用程序域本身意外退出時。 在這種情況下,您知道您的所有會話都已死,無論如何。

安德魯·巴伯是對的。 您還可以做一件事:

  • 要求您的用戶注銷。 事實上,不僅要問他們,還要以某種方式強迫/提醒他們必須注銷。

這是我如何做到的:

<script type="text/javascript">
    $(function () {
        $("a").click(function () {
            window.onbeforeunload = null;
        });
    }); 
</script>

<script type="text/javascript">
    window.onbeforeunload = confirmExit;
    function preConfirm() {
        if ((window.event.clientX < 0) || (window.event.clientY < 0)) {
            confirmExit();
        }
    }
    function confirmExit() {
        return "You have attempted to leave this page.  It is suggested to log out using the link.  Are you sure you want to exit this page?";
    }
</script>

通過將這些腳本添加到您的母版頁(如果是這種情況或在每個頁面中),如果用戶嘗試加載另一個頁面或關閉瀏覽器而不注銷,瀏覽器會使用帶有您的消息的模式窗口提示用戶。

當然,即使您提醒他注銷,用戶我還是決定離開該頁面,但實際上您已盡力而為!!

如果使用SQL Server數據庫來存儲您的會話過程變得更容易檢索這似乎通過使用SQL查詢來獲取你所需要的是被激活的。

我說出現是因為就像其他人指出的那樣,如果使用Session.Abandon()沒有正確清除會話,則會話可能會掛起,例如,如果用戶只是關閉瀏覽器窗口而不注銷。 這意味着您只能依靠會話的到期日期來確保會話完全結束,無論您設置了多長時間。

我還應該指出,如果您確實使用數據庫作為會話存儲,則Session_End事件將永遠不會觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM