【问题标题】:Is there a way to detect if browser has been closed in a asp.net web mvc 5.0 project?有没有办法检测浏览器是否已在 asp.net web mvc 5.0 项目中关闭?
【发布时间】:2021-10-20 11:31:06
【问题描述】:

我正在将 tempdata 用于变量,并且当前已将其设置在家庭控制器中,并且在我的第一个最后一个控制器中,我通过执行 if(TempData.ContainsKey()) TempData.Remove() 删除了该键。我把它放在那里,假设用户将从 A 点到 D 点,其中 D 是最后一个控制器。但我注意到,如果我在应用程序的任何一点关闭应用程序,分配的临时数据即tempdata["username"] = username 将包含从程序的原始启动输入的先前值,然后将在用户输入一个值后更新更新临时数据的密钥。 在 asp.net web mvc 5.0 项目中有一种方法可以检查浏览器是否已关闭,这样我就可以删除最后一个控制器内部的逻辑,该控制器将密钥删除到检查逻辑中如果浏览器已关闭?

【问题讨论】:

  • 这可能不是一个好主意。在许多情况下,这将无法正常工作,例如如果网络连接不稳定,或者用户打开了两个选项卡并关闭了其中一个。此外,如果您实际存储用户名,则存在安全隐患,例如你已经成熟了会话固定攻击。标准方法是保留任何临时数据,但在用户首次访问站点时完全重置临时数据(和所有其他会话变量)。从用户的角度来看,这将产生或多或少相同的效果。

标签: c# asp.net-mvc tempdata


【解决方案1】:

您可以使用 beforeunload 事件检测正在从 javascript 关闭的选项卡/浏览器。 Credited Source

window.addEventListener('beforeunload', function (e) {
    // User is closing the tab/browser
    // You can cancel this event by using e.preventDefault();
    // and for older browsers by using  e.returnValue = '';
});

从那里您可以使用 AJAX 将消息发送回您的应用程序以处理临时数据删除。

下面使用JQuery

$.ajax({
    method: "POST",
    url: "AbandonSession",
    data: { someVar: "some val" }
})
.done(function( msg ) {
    alert( "Session abandoned: " + msg );
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2022-11-15
    • 2013-05-12
    • 1970-01-01
    • 2012-05-07
    • 2021-11-08
    相关资源
    最近更新 更多