Increasing session timeout in asp.net core web app

Stuart Little 21 Reputation points
2022-04-26T16:38:17.34+00:00

Hi,

I would like to increase the session timeout from 20 minutes to 4 hours.

To achieve this, in the ConfigureService of startup.cs, I have the following code

services.AddAuthentication("SampleAuth")
                .AddCookie("SampleAuth", config =>
                {
                    config.Cookie.Name = "Sample.Cookie";
                    config.LoginPath = "/Login/Index";
                    config.AccessDeniedPath = "/Login/Unauthorized";
                    config.ExpireTimeSpan = TimeSpan.FromMinutes(240);
                    config.SlidingExpiration = true;
                });


services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(240); });

In Configure method, I have app.UseSession();

Also, in the IIS, I have increased the session timeout to 4 hours.

However, the session still timeout after 20 mins.

Can you please let me know what else I am missing?

Thank you.

Developer technologies ASP.NET ASP.NET Core
{count} votes

Accepted answer
  1. Bruce (SqlWork.com) 77,686 Reputation points Volunteer Moderator
    2022-04-26T17:40:58.387+00:00

    session is unrelated to the authentication cookie. session uses its own cookie with an expiration time. most likely your server is going idle and being recycled, thus changing the encryption keys, making both cookies invalid.

    either use a persistent key storage provider, or disable idle shutdown.

    https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-6.0


2 additional answers

Sort by: Most helpful
  1. Anonymous
    2022-04-27T07:48:56.497+00:00

    Hi @Stuart Little ,

    By default, the session's data is stored inside the server memory and the IIS contains the idle-timeout. The idle-timeout default value is 20 minutes. If there is no request send to the server during 20 minutes. The IIS will terminate the application pool's worker process. If you don't want to use other storage like redis or storage to store the session data, I suggest you could modify the idle tomeout to 0.

    More details about how the session state works inside the IIS, I suggest you could refer to this article.

    196883-image.png

    1 person found this answer helpful.
    0 comments No comments

  2. SurferOnWww 4,706 Reputation points
    2022-04-27T04:22:15.84+00:00

    Can the following Microsoft document help?

    Session and state management in ASP.NET Core
    https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-6.0

    As for the "Increasing session timeout" see the following section:

    Configure session state
    https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-6.0#configure-session-state

    I would like to increase the session timeout from 20 minutes to 4 hours.

    Try to set: options.IdleTimeout = TimeSpan.FromHours(4);


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.