c# - asp.net core 2.0区分过期session和新用户

标签 c# asp.net asp.net-mvc asp.net-core

我在我的 Startup.cs 文件中使用标准身份验证中间件,如下所示:

services.AddAuthentication("auth")
    .AddCookie("auth", options => 
        {
            options.LoginPath = new PathString("/account/index");
            options.AccessDeniedPath = new PathString("/account/forbidden");
            options.SlidingExpiration = true;
        });

一旦用户因为 session 过期而被重定向到登录页面,我希望能够在我的登录页面上显示“您的 session 已过期”消息。当新用户访问该页面时,显然不会有它。

从外观上看,身份验证中间件只是检查从另一个中间件传递的 401 并将其更改为 302 到我想要的位置,让我无法区分这两者。

我可以通过使用标准的 .net 核心 2.0 库来实现这种差异化,还是应该改用自定义实现?

最佳答案

如果您想检测用户是否已登录,您可以设置第二个不相关的 session cookie,说明用户有一个 session 。不要在 cookie 中存储任何其他信息。我们称其为“标记”cookie。

当用户登录时,您会同时创建一个 session cookie 和一个标志 cookie。 session cookie 可以在您将其设置为任何时候过期,而标志 cookie 不应过期。假设 30 天后,您将自动退出您的帐户 - session cookie 应该过期。因为您仍然有标志 cookie 但没有 session cookie,所以当没有 session cookie 时,您可以检查每个页面是否有标志 cookie。

如果 Flag cookie 存在但实际 session cookie 不存在,您可以重定向到登录页面并通知他们他们的登录 session 已过期。一旦你到达那里,我一定会删除 cookie,这样每次他们加载页面时,他们都不会被重定向到登录。这意味着该消息只会向用户显示一次,因此如果他们想浏览(例如主页)但不想重新登录,他们仍然可以尝试访问站点上的其他页面而不会被重定向。如果他们尝试访问一个经过身份验证的页面,应该再次提示他们输入凭据

关于c# - asp.net core 2.0区分过期session和新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079441/

相关文章:

c# - 在操作中获取空参数

c# - 在 C# 中使用 'var' 关键字会影响性能吗?

c# - 有人为 Windows Azure Service Bus Brokered Messaging 服务创建过 FTP 适配器吗?

c# - ASP.net Session_Start 方法中的依赖注入(inject)

c# - 想了解适用于我的应用程序的最佳框架

javascript - 更改 TextBoxFor 只读属性以决定是否选中复选框

c# - 为什么多选列表不显示所选项目? MVC

c# - 对象发送者作为验证当前文本框的参数

.net - 为什么 Telerik ASP.NET MVC 控件比 ASP.NET AJAX 少?

asp.net - 如何为此 RC4 算法创建解密函数