C# 如何防止在使用x关闭选项卡后未登录就返回我的站点?

C# 如何防止在使用x关闭选项卡后未登录就返回我的站点?,c#,asp.net,forms-authentication,C#,Asp.net,Forms Authentication,我的网站上有一个注销按钮,可以触发 FormsAuthentication.SignOut() 强制重新登录,即使使用浏览器上的“后退”按钮或复制/粘贴URL。但是,如果一个用户通过浏览器的x按钮关闭该选项卡,而另一个选项卡仍处于打开状态,则如果他们复制/粘贴URL,则页面将在不登录的情况下重新打开。这是一个严重的安全问题。如果浏览器通过关闭所有未发生的选项卡而完全关闭。即使浏览器尚未完全关闭,如何防止在关闭选项卡后返回URL?是否有方法捕获将触发FormsAuthentication.Sig

我的网站上有一个注销按钮,可以触发

FormsAuthentication.SignOut()

强制重新登录,即使使用浏览器上的“后退”按钮或复制/粘贴URL。但是,如果一个用户通过浏览器的x按钮关闭该选项卡,而另一个选项卡仍处于打开状态,则如果他们复制/粘贴URL,则页面将在不登录的情况下重新打开。这是一个严重的安全问题。如果浏览器通过关闭所有未发生的选项卡而完全关闭。即使浏览器尚未完全关闭,如何防止在关闭选项卡后返回URL?是否有方法捕获将触发
FormsAuthentication.SignOut()的javascript OnClose事件?我在asp.net c#中工作。

您可以在window
onbeforeunload
事件中使用javascript调用您的网站并注销用户。

这是浏览器会话问题

浏览器会话(实际上,当浏览器关闭时,保存会话id的cookie将被删除)仅在浏览器关闭时结束。这就是为什么当您只关闭一个选项卡而不关闭整个浏览器时,您不会注销

当用户仅关闭选项卡时,没有理由注销该用户。这种行为在网络上不是标准的,如果你这样做,用户可能会迷失方向

但无论如何,如果你想这样做,你可以编写一些javascript,弹出一个弹出窗口,警告用户在离开前必须注销。为此,请使用unload或onbeforeunload事件

请看下面的示例:

等等,用户在您的站点上打开了两个选项卡,他们在其中一个选项卡中单击“注销”,但在另一个选项卡中没有?那么,他们还没有真正注销-会话仍然处于活动状态。我明白这怎么会是个问题。但这不是一个安全问题,它只是同一个用户仍然登录

无论如何,您可以创建一个新的会话变量,在用户登录时用值填充该变量,在用户注销时删除该变量。然后在每个页面加载中,检查这个变量,如果它不存在,则重定向到登录页面


可能有点过火,但这都是服务器端的,您不需要Javascript来完成。

您是否担心用户禁用Javascript?这种非常常见的浏览器/用户行为如何成为“严重的安全问题”?如果他们打开的另一个选项卡是您的网站呢?您建议的解决方案会将它们注销,即使它们仍在您的网站上。@Henk Holterman例如,我让技术人员在连接到我们网站的客户场所工作,如果他们按说明关闭选项卡,则未经授权的人可能会返回该网站并访问敏感信息。我的问题不是我的网站上有两个选项卡打开,在我的站点上是1,在另一个站点上是1,当我站点的选项卡关闭时,您可以通过另一个选项卡返回,而无需登录。@DovMiller-Hm,这不应该发生。会议到此结束。不过,我认为我的解决方案应该有效。你能试试吗?