站长  发布于 2024-03-21 22:41:49  阅读(362)  点赞(0)  评论(0)

    最近在写一个后台管理站点,启用了最简单的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也没有问题。

Cookie查看

    这个问题到这很久都没有头绪只能放一放,在某天配置IIS服务器的时候终于想起来IIS有自动回收的机制,因为我做的这个是管理后台用户少,在测试时也就只有自己在登录,只要我自己不登录,超过20分钟,IIS应用程序池就会当作闲置资源回收,因为进程回收导致保存在内存中的Session丢失。知道问题在哪,配置就简单了,如下:

    IIS->应用程序池->找到网站对应的应用程序池->右键高级设置->进程模式->闲置超时(分钟)设置为240,确定保存配置。

应用程序池配置


评论列表
发表评论
请填写昵称