asp.net-core - asp net core 3.1 Session永不过期
问题描述
我已经尝试了在 StackOverflow 上找到的所有内容,但我仍然无法管理 Session(内容)自动过期。
我试过了:
我不会在 ajax 调用上访问会话数据(设置、获取),因此这不能自动增加会话过期时间。
在旧的 AspNet MVC 中它是如此简单/琐碎 - 立即按预期工作。
我所做的就是将自定义登录(数据)存储到 Session 中,并期望 Session 在用户不活动 20 分钟后下降。但这永远不会发生。
有任何想法吗?
编辑:饼干
lb_commonator=ffffffff0972280045525d5f4f58455e445a4a423660; crowd.token_key=7qN9z4UYR3tCjYdronwmOw00; .AspNetCore.Antiforgery.tYkxYH7Bg6I=CfDJ8OahW8JbNMdPv78xOmnUC6BtivuFvWy4RhYaN0oRtiUvkLpVtHLxgQaQOS1RTNqT8E0LaobeaNdLIhhoy4z4qSJleqiK2QJTWEptEDFAITNCTdh03AIqcd0mBL0FZeFcr5GalTfqiNahST7eUL7Wnpg; .AspNetCore.Session=CfDJ8OahW8JbNMdPv78xOmnUC6Cwi2HZVPs93%2Bohf8c%2BvQ1hWZVHeu54cwkg8PND41KXN1F%2BeAOSnTnkiT3RAGb3mPQjLRMpcq1x9f5KFrgegRRoEDHx%2FgEknhSOo8yCfKp1srlrzTWUtpUF8tsFKn1JwPLI9fHT77SGscSkTMrsueYr
编辑 2(IdleTimeout 和 ExpireTimeSpan 根本没有效果):
// Add session
// Add session
// Add session
services.AddSession();
// TESTING: TODO:
// TESTING: TODO:
// TESTING: TODO:
//services.AddSession(options =>
//{
// options.IdleTimeout = TimeSpan.FromSeconds(10);
//});
//services.ConfigureApplicationCookie(options =>
// {
// options.SlidingExpiration = true;
// options.ExpireTimeSpan = TimeSpan.FromSeconds(10);
// });
编辑 3:
解决方案
// TESTING: TODO:
// TESTING: TODO:
// TESTING: TODO:
//services.AddSession(options =>
//{
// // session data experation in storage
// // for example, if you use redis, this will add ttl 10 secs
// // for data in redis, but no influence to cookie lifitime
// options.IdleTimeout = TimeSpan.FromSeconds(10);
// // this will affect on cookie liftime in browser
// // if you do not set it, cookie will be Session
// // and expire when you close your browser
// options.Cookie.MaxAge = TimeSpan.FromHours(1);
//});
编辑:
要刷新现有会话 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 数据中),而不是默认的 Session 中间件。默认实现在这里。
我不知道你在解决什么样的任务,但我认为以下配置就足够了:
services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(10); });
它将在 10 秒内使您的会话数据失效(cookie 可能仍然存在),并为会话数据提供滑动到期。
推荐阅读
- if-statement - 如何在单个单元格中使用三个条件?(如果+与)
- java - 无法理解没有类型参数的泛型接口的使用
- plsql - 第 6 行的错误:PL/SQL:SQL 语句被忽略
- javascript - 功能未按顺序执行,如何在前一个完成后运行一个
- r - 如何从 R 中的非随机样本中获取二元法线轮廓值?
- php - 如何在whatsapp或其他地方分享带有文本的图像?
- excel - 给定一个数组,我如何索引匹配每个值并在没有帮助列的情况下对它们求和?
- java - 在创建子列表的特定值之间进行过滤
- python - Django:请参阅夹具中的用户对象以获取另一个模型
- python - 我可以在 Windows 上为 iOS 开发 Kivy 应用程序吗?