最近在写一个后台管理站点,启用了最简单的Session作为记录用户登录凭证,在ASP.NET Core中,Session默认的过期时间是20分钟。20分钟过期实在太短,工作做到一半有时离开一下,超过20分钟Session回收,登录信息过期导致之前做的数据丢失那就太尴尬了。
通过以下代码在Program.cs中启用Session并将Session的过期时间设置为240分钟(4小时):
var builder = WebApplication.CreateBuilder(args); builder.Services.AddSession(options =>{ options.IdleTimeout = TimeSpan.FromMinutes(240); options.Cookie.Name = "NET_CORE_SESSION"; }); var app = builder.Build(); app.UseSession();
本以为能愉快的解决问题,但是结果却是问题依旧,页面放置超过20分钟后登录就会失效,那么问题在哪里呢?一度怀疑是不是Session设置不对,网上找了设置Session的代码就是那样并没有错。Session设置没有问题,那是不是Cookie过期的问题导致的呢?到浏览器检查Cookie看到Cookie的过期类型为会话,说明Cookie也没有问题。
这个问题到这很久都没有头绪只能放一放,在某天配置IIS服务器的时候终于想起来IIS有自动回收的机制,因为我做的这个是管理后台用户少,在测试时也就只有自己在登录,只要我自己不登录,超过20分钟,IIS应用程序池就会当作闲置资源回收,因为进程回收导致保存在内存中的Session丢失。知道问题在哪,配置就简单了,如下:
IIS->应用程序池->找到网站对应的应用程序池->右键高级设置->进程模式->闲置超时(分钟)设置为240,确定保存配置。
点赞(0)
请不要重复点赞
评论列表