代码之家  ›  专栏  ›  技术社区  ›  Developer Webs

.NET Core 3.1 web会话超时

  •  0
  • Developer Webs  · 技术社区  · 3 年前

    我正在用IIS托管一个C#网站(.NET Core 3.1)。我已将IIS应用程序池的“空闲超时(分钟)”设置为150。我已经重新启动了网站并回收了应用程序池。

    身份验证是通过Microsoft完成的。AspNetCore。身份。登录管理器。

    用户登录,但他们的登录会话在45分钟不活动时自动过期。我还不知道他们是在什么时候注销的(我猜是20分钟)。

    由于IIS会话注销时间为150分钟,为什么用户在不到45分钟内就注销了?

    有没有一种方法可以使用IIS、apps.json或web.config使他们的会话持续至少150分钟?

    我想我可以用代码做到这一点:

    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromHours(3);
    });
    

    …并可能从aspsettings.json中读取该值,但我不想对该值进行硬编码,因为它可能会因环境而异。

    0 回复  |  直到 3 年前
        1
  •  2
  •   Developer Webs    3 年前

    我发现了问题。在Starup.cs中可以找到:

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/Logout";
        options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
    });
    

    为了保持理智,我把它改成了:

    int timeoutInMinutes = 30;
    try
    {
        timeoutInMinutes = Int32.Parse(Configuration.GetSection("AppSettings:SessionTimeoutInMinutes").Value);
    }
    catch (Exception) { } // do nothing
    
    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/Logout";
        options.ExpireTimeSpan = TimeSpan.FromMinutes(timeoutInMinutes);
    });
    

    有了这个更改,如果不在appse.json中更改,登录会话现在将在30分钟后过期,否则它将使用我在appsejson中指定的值。