如何获得Web应用程序中活动会话的列表?

问题描述 投票:1回答:3

我正在尝试获取Web应用程序中活动会话ID的列表。

我尝试管理Global.asax中的列表。我在启动Session_Start时添加了会话ID,在启动Session_End时删除了会话ID。

问题是在用户关闭浏览器或关闭计算机的情况下。没有触发Session_End,并且列表中仍然存在该种子。

有人知道如何获取列表?

谢谢!

c# asp.net session global-asax
3个回答
4
投票

no解决此问题的方法,可以避免您注意到的复杂性。除非有某种明确的方式来结束用户会话-并且用户激活了它-知道会话何时结束的唯一方法是允许其终止。

当会话超时时,

Session_End最终触发。您唯一[看到Session_End的调用是在应用程序域本身意外退出时。在这种情况下,无论如何,您都知道all会话已死。


2
投票
安德鲁·理发师是正确的。您还可以做一件事:

    要求您的用户注销。实际上,不仅问他们,还以某种方式强迫/提醒他们必须注销。
  • 这是我的做法:

    <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>

    通过将这些脚本添加到您的母版页(如果是这种情况或在每个页面中,如果浏览器试图加载另一个页面或关闭浏览器而不注销,则浏览器会向用户显示带有您的消息的模式窗口。

    当然,即使您提醒用户注销,我也还是决定离开该页面,但是实际上

    您已经尽力了!


  • 1
    投票
    如果使用SQL Server数据库在其中存储会话,则可以通过使用SQL查询来获取所需的内容,从而更容易地检索当前正在活动的

    appears。

    我说

    出现

    ,因为像其他人指出的那样,如果未使用Session.Abandon()正确清除会话,则会话可能会挂起。如果用户只是关闭浏览器窗口而不注销。这意味着您只能依靠会话的到期日期来确保会话完全结束,无论您将其设置为多长时间。我还应该指出,如果您确实使用数据库作为会话存储,则Session_End事件将永远不会触发。
    © www.soinside.com 2019 - 2024. All rights reserved.