我在我的Startup.cs
文件中使用标准身份验证中间件,如下所示:
services.AddAuthentication("auth")
.AddCookie("auth", options =>
{
options.LoginPath = new PathString("/account/index");
options.AccessDeniedPath = new PathString("/account/forbidden");
options.SlidingExpiration = true;
});
我希望能够显示"您的会话已过期"一旦用户因会话过期而被重定向到我的登录页面上的消息。当新用户访问该页面时,显然没有它。
从它的外观来看,身份验证中间件只是检查从另一个中间件传递的401并将其更改为302到我想要的位置,这使我无法区分这两者。
我可以通过使用标准的.net核心2.0库来实现这种差异化,还是应该转而使用自定义实现?
答案 0 :(得分:3)
如果要检测用户是否已登录,可以设置第二个不相关的会话cookie,说明用户是会话。不要在cookie中存储任何其他信息。我们称之为“旗帜”。 cookie中。
当用户登录时,您将同时创建会话cookie和标记cookie。会话cookie可以在您设置时到期,并且标志cookie永远不会过期。让我们说30天后,您将自动退出帐户 - 会话cookie将过期。因为您仍然拥有标记cookie而不是会话cookie,所以如果您没有会话cookie,则可以检查每个页面是否有标记cookie。
如果Flag Cookie存在但实际会话cookie不存在,您可以重定向到登录页面并通知他们他们的登录会话已过期。我一定要在你到达那里之后删除cookie,这样每次加载页面时都不会将其重定向到登录状态。这意味着该消息将仅向用户显示一次,因此他们仍然可以尝试访问该网站上的其他页面,而不是在他们想要浏览(例如主页)但不想重新登录时重定向。如果他们试图访问在经过身份验证的页面上,应再次提示他们输入凭据