浏览器关闭时的 .net 核心 cookie 身份验证

Posted

技术标签:

【中文标题】浏览器关闭时的 .net 核心 cookie 身份验证【英文标题】:.net core cookies authentication on browser close 【发布时间】:2017-07-31 01:54:34 【问题描述】:

我在我的 .net 核心 mvc 应用程序中使用 cookie 身份验证。我的要求之一是在浏览器关闭时注销用户。我在应用程序中将滑动到期时间设置为 5 分钟。正如预期的那样,如果用户在 5 分钟后返回网站,用户将被重定向到登录页面,但如果用户在 5 分钟内返回,则用户会自动登录。如果浏览器关闭,有没有办法注销用户?

【问题讨论】:

【参考方案1】:

没有直接检测浏览器是否关闭的方法,但是您当然可以检查选项卡是否已关闭。您可以使用以下方法,按复杂程度排列:


卸载事件

在您的<body> 标签上监听unload 事件:

<html>
  <body onunload="tellServerBrowserClosed()">
  <!--...-->

警告:即使您通过链接(在同一网站内)或浏览器的后退按钮离开网站也会触发。 (not a good solution)


Ajax 信标

只需定期(20-60 秒间隔)从浏览器(应该有用户的 cookie)向 API 发送 Ajax GET 请求。当错过 2-3 个信标(API 调用)时,清除该用户的数据。

警告:您需要实现一个服务器端 cronjob 来处理过期的信标


WebSockets

使用 WebSocket 连接(可能是Socket.io)。这样,一旦用户关闭选项卡,连接就会关闭,您可以使用此事件清除他们的会话。 (为了提高准确性,您可能需要跟踪来自同一用户的多个套接字连接,以防他们使用超过 1 个标签

【讨论】:

tellServerBrowserClosed 样品? Ajax Beacon 和 WebSockets 真实世界示例? 是的,也考虑过是否可以使用 WebSockets。 SignalR 在 .NET Core 中很容易实现。设置一个集线器,跟踪相同的客户端连接,当计数为零时,从数据库中删除会话(如果存在)

以上是关于浏览器关闭时的 .net 核心 cookie 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

session与cookie 浏览器关闭时的区别

如何配置 .net 核心以将身份验证 cookie 发送到不同的域

.NET 基于 cookie 的身份验证,无需表单身份验证

登陆功能的记住我选项(Cookie和Session)

在nodejs中删除浏览器关闭时的会话

基于 Cookie 的身份验证