【问题标题】:How do I automatically redirect when the session cookie expires?会话 cookie 过期时如何自动重定向?
【发布时间】:2022-02-10 15:46:26
【问题描述】:

当用户闲置十分钟时,我想进行自动重定向。下面是测试代码,不工作。

LoginPathLogoutPathAccessDeniedPath 不存在。因此,我预计超时后会出现错误。相反,我可以继续成功单击“主页”和“关于”而不会出现错误且不会被重定向。我的期望是我将被重定向回主页。

示例代码:

services.AddMemoryCache();
services.AddSession(options =>
    {
        options.Cookie.Name = "MyAppCookie";
        options.Cookie.IsEssential = true;
        options.Cookie.HttpOnly = true;
        options.IdleTimeout = TimeSpan.FromMinutes(1);
    });

           
services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/Login";
        options.AccessDeniedPath = "/Account/AccessDenied";
        options.SlidingExpiration = true;
    });

【问题讨论】:

  • 如果页面丢失,我不希望这会重定向到主页。相反,我希望它会重定向到目标页面,但会产生 404 错误。显然,这没有发生,因此你的问题。但是您的期望会推断出第二个问题,该问题与您的主要问题有点相切(例如,“如何将 404 错误路由到我的主页?”)。
  • 主要问题是为什么自动重定向没有在 cookie 超时时触发。 404 期望用于在 Hello World 应用程序上进行视觉确认。毫无疑问,自动重定向是由 cookie 超时触发的。
  • 是的,我理解那部分,我认为这在原始问题中很清楚。只是你第二段中的最后一句话让我感到困惑。

标签: asp.net-core asp.net-core-5.0


【解决方案1】:

在服务器端,您的代码可以知道会话超时。使用它,您可以设置一个 cookie,指示实际会话超时发生的时间(没有提及它是活动会话超时还是空闲超时)。页面上运行的javascript可以定期读取cookie并在超过超时值时重定向用户。

这是我希望对您有所帮助的众多方法之一。

参考这篇文章:

In ASP Net Core 3.1 Expiration cookie is not redirecting to login page when using ajax

【讨论】:

    【解决方案2】:

    你可以为它们使用 Axios 拦截器,在令牌过期后的第一个请求中你可以重定向它。 另外,您可以在 [https://jwt.io/][1] 上对您的令牌进行解码并获取到期日期,您可以通过它来检查。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多