我正在尝试获取Web应用程序中活动会话ID的列表。
我尝试管理Global.asax中的列表。我在启动Session_Start时添加了会话ID,在启动Session_End时删除了会话ID。
问题是在用户关闭浏览器或关闭计算机的情况下。没有触发Session_End,并且列表中仍然存在该种子。
有人知道如何获取列表?
谢谢!
有no解决此问题的方法,可以避免您注意到的复杂性。除非有某种明确的方式来结束用户会话-并且用户激活了它-知道会话何时结束的唯一方法是允许其终止。
当会话超时时,Session_End
将最终触发。您唯一[Session_End
的调用是在应用程序域本身意外退出时。在这种情况下,无论如何,您都知道all会话已死。
<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>
通过将这些脚本添加到您的母版页(如果是这种情况或在每个页面中,如果浏览器试图加载另一个页面或关闭浏览器而不注销,则浏览器会向用户显示带有您的消息的模式窗口。当然,即使您提醒用户注销,我也还是决定离开该页面,但是实际上
您已经尽力了!
appears。
我说出现
,因为像其他人指出的那样,如果未使用Session.Abandon()
正确清除会话,则会话可能会挂起。如果用户只是关闭浏览器窗口而不注销。这意味着您只能依靠会话的到期日期来确保会话完全结束,无论您将其设置为多长时间。我还应该指出,如果您确实使用数据库作为会话存储,则Session_End
事件将永远不会触发。