Asp.net core Asp net core 3.1会话永不过期

Asp.net core Asp net core 3.1会话永不过期,asp.net-core,asp.net-core-3.1,Asp.net Core,Asp.net Core 3.1,我已经尝试了在StackOverflow上找到的所有东西,但仍然无法管理会话(内容)自动过期 我试过: 其他堆栈溢出链接很少 我不在ajax调用中访问会话数据(set,get),因此这不能自动增加会话过期时间 在旧的AspNet MVC中,它是如此简单/琐碎-立即按预期工作 我所做的一切我将自定义登录(数据)存储到会话中,并期望会话在用户不活动20分钟后停止。但这种情况从未发生过 有什么想法吗 编辑:Cookies lb_commonator=ffffffff0972280045525

我已经尝试了在StackOverflow上找到的所有东西,但仍然无法管理会话(内容)自动过期

我试过:

  • 其他堆栈溢出链接很少
我不在ajax调用中访问会话数据(set,get),因此这不能自动增加会话过期时间

在旧的AspNet MVC中,它是如此简单/琐碎-立即按预期工作

我所做的一切我将自定义登录(数据)存储到会话中,并期望会话在用户不活动20分钟后停止。但这种情况从未发生过

有什么想法吗

编辑:Cookies

 lb_commonator=ffffffff0972280045525d5f4f58455e445a4a423660; crowd.token_key=7qN9z4UYR3tCjYdronwmOw00; .AspNetCore.Antiforgery.tYkxYH7Bg6I=CfDJ8OahW8JbNMdPv78xOmnUC6BtivuFvWy4RhYaN0oRtiUvkLpVtHLxgQaQOS1RTNqT8E0LaobeaNdLIhhoy4z4qSJleqiK2QJTWEptEDFAITNCTdh03AIqcd0mBL0FZeFcr5GalTfqiNahST7eUL7Wnpg; .AspNetCore.Session=CfDJ8OahW8JbNMdPv78xOmnUC6Cwi2HZVPs93%2Bohf8c%2BvQ1hWZVHeu54cwkg8PND41KXN1F%2BeAOSnTnkiT3RAGb3mPQjLRMpcq1x9f5KFrgegRRoEDHx%2FgEknhSOo8yCfKp1srlrzTWUtpUF8tsFKn1JwPLI9fHT77SGscSkTMrsueYr
编辑2(IdleTimeout和ExpireTimeSpan完全无效):

编辑3:

编辑:

  • 要刷新现有会话cookie,您需要跟踪cookie创建时间,例如在会话数据中,并在中间件中重置cookie

         app.Use(async (context, next) =>
         {
             string sessionCookie;
             if (/*add here expiration check &&*/ context.Request.Cookies.TryGetValue("SessionCookieName", out sessionCookie))
             {
                 context.Response.Cookies.Append("SessionCookieName", sessionCookie, new CookieOptions
                 {
                     MaxAge = TimeSpan.FromSeconds(10),
                     HttpOnly = true,
                     SameSite = SameSiteMode.Lax,
                     Path = "/"
                 });
             }
             await next.Invoke();
         });
    
  • 或者您也可以编写中间件来处理会话cookie滑动到期(到期时间可能会添加到cookie数据中),而不是默认的会话中间件。默认实现是

  • 我不知道您正在解决什么样的任务,但我认为以下配置就足够了:

     services.AddSession(options =>
     {
        options.IdleTimeout = TimeSpan.FromSeconds(10);
     });
    

  • 它将在10秒钟内使您的会话数据无效(cookie可能仍处于活动状态),并为会话数据提供滑动过期。

    您能在浏览器中提供会话cookie属性吗?是的,我会,明天。我是指开发人员工具的属性]()经过一些测试,该会话似乎在(默认)20分钟后正常过期。我只是无法更改默认时间(20分钟)。我添加了cookie expires信息的屏幕截图。正如在回答的代码块中提到的,当您不设置options.cookie.MaxAge时,您的cookie将是会话(图片中的第5列)。只有当你关闭浏览器时它才会过期(我在opera上遇到了一些问题)。如果要设置options.Cookie.MaxAge=TimeSpan.FromSeconds(10);-它将在10秒后过期。但如果您重复使用会话数据的查询,将设置新的cookie。如果cookie过期,请使用以下配置并在开发工具中跟踪:``services.AddSession(options=>{options.cookie.MaxAge=TimeSpan.FromSeconds(1);});至于方法配置应用程序okie-它只会影响身份验证Cookies谢谢你的想法。我试试看!IInar,设置最大年龄有效,但滑动过期无效?即使我在MaxAge过期时间跨度内读取/写入会话。
         app.Use(async (context, next) =>
         {
             string sessionCookie;
             if (/*add here expiration check &&*/ context.Request.Cookies.TryGetValue("SessionCookieName", out sessionCookie))
             {
                 context.Response.Cookies.Append("SessionCookieName", sessionCookie, new CookieOptions
                 {
                     MaxAge = TimeSpan.FromSeconds(10),
                     HttpOnly = true,
                     SameSite = SameSiteMode.Lax,
                     Path = "/"
                 });
             }
             await next.Invoke();
         });
    
     services.AddSession(options =>
     {
        options.IdleTimeout = TimeSpan.FromSeconds(10);
     });