Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取web应用程序中活动会话的列表?_C#_Asp.net_Session_Global Asax - Fatal编程技术网

C# 如何获取web应用程序中活动会话的列表?

C# 如何获取web应用程序中活动会话的列表?,c#,asp.net,session,global-asax,C#,Asp.net,Session,Global Asax,我正在尝试获取web应用程序中活动会话id的列表 我试图在Global.asax中管理一个列表。 我在启动会话时添加会话id,在启动会话时删除会话id 问题出现在用户关闭浏览器或关闭计算机的情况下。 会话结束未激发,并且该会话仍存在于列表中 有人知道我怎么才能拿到名单 谢谢 这个问题没有解决方案可以避免您所注意到的复杂性。除非有明确的方法来结束用户的会话(并且用户激活了它),否则知道会话何时结束的唯一方法就是允许它过期 会话超时时,会话_End最终将触发。只有当应用程序域本身意外退出时,才会看到

我正在尝试获取web应用程序中活动会话id的列表

我试图在Global.asax中管理一个列表。 我在启动会话时添加会话id,在启动会话时删除会话id

问题出现在用户关闭浏览器或关闭计算机的情况下。 会话结束未激发,并且该会话仍存在于列表中

有人知道我怎么才能拿到名单

谢谢

这个问题没有解决方案可以避免您所注意到的复杂性。除非有明确的方法来结束用户的会话(并且用户激活了它),否则知道会话何时结束的唯一方法就是允许它过期

会话超时时,会话_End最终将触发。只有当应用程序域本身意外退出时,才会看到调用会话结束。在这种情况下,您知道您的所有会话都已停止。

这个问题没有解决方案可以避免您注意到的复杂性。除非有明确的方法来结束用户的会话(并且用户激活了它),否则知道会话何时结束的唯一方法就是允许它过期


会话超时时,会话_End最终将触发。只有当应用程序域本身意外退出时,才会看到调用会话结束。在这种情况下,您知道您的所有会话都已死亡。

如果您使用SQL Server数据库存储会话,则通过使用SQL查询获取所需内容,可以更轻松地检索当前处于活动状态的会话

我说出现是因为和其他人一样,如果没有使用会话正确清除会话,会话可能会挂起。放弃,例如,如果用户只是关闭浏览器窗口而没有注销。这意味着您只能依靠会话的到期日期来确保会话完全结束,不管您设置了多长时间


我还应该指出,如果使用数据库作为会话存储,会话结束事件将永远不会触发。

如果使用SQL Server数据库存储会话,则通过使用SQL查询获取所需内容,可以更轻松地检索当前活动的内容

我说出现是因为和其他人一样,如果没有使用会话正确清除会话,会话可能会挂起。放弃,例如,如果用户只是关闭浏览器窗口而没有注销。这意味着您只能依靠会话的到期日期来确保会话完全结束,不管您设置了多长时间


我还应该指出,如果使用数据库作为会话存储,会话结束事件将永远不会触发。

Andrew Barber是正确的。你还可以做一件事:

请您的用户注销。事实上,不仅仅是问他们,而是在某种程度上强迫/提醒他们必须注销。 我是这样做的:

<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>
通过将这些脚本添加到母版页(如果是这种情况),或者在每个页面中,如果用户尝试加载另一个页面或在不注销的情况下关闭浏览器,浏览器都会提示用户一个带有消息的模式窗口


当然,即使你提醒我的用户注销,我的用户还是决定离开该页面,但实际上你已经尽力了

安德鲁·巴伯是对的。你还可以做一件事:

请您的用户注销。事实上,不仅仅是问他们,而是在某种程度上强迫/提醒他们必须注销。 我是这样做的:

<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>
通过将这些脚本添加到母版页(如果是这种情况),或者在每个页面中,如果用户尝试加载另一个页面或在不注销的情况下关闭浏览器,浏览器都会提示用户一个带有消息的模式窗口


当然,即使你提醒我的用户注销,我的用户还是决定离开该页面,但实际上你已经尽力了

M4N的可能重复-我看到了这篇文章,但其中建议的解决方案并不能解决我的问题-用户可以关闭浏览器,但会话仍然有效。无论如何,谢谢:@Inbal这是因为没有解决方案。M4N可能重复-我看到了这篇文章,但其中建议的解决方案并不能解决我的问题-用户可以关闭浏览器,但会话仍然有效。无论如何,谢谢:@Inbal这是因为没有解决方案。