首页 > 解决方案 > 您可以将特定会话变量设置为仅存活 5 分钟吗?

问题描述

有没有办法将会话ASP.NET Webforms变量的生存时间设置为 5 分钟?

例如,如果我有变量:

Session["Name"] = "Bob";

5分钟后我希望它被摧毁,或者至少能够使它无效。

例子:

Session["Name"] = null;
//But in the background and not code-controlled as it has to be live over multiple pages.

我知道这些 Session 变量在 IIS 中控制的超时时到期,但我试图在超时发生之前以 5 分钟为间隔使它们到期,这可能吗?

标签: c#asp.netsessionwebforms

解决方案


创建两个会话值(或包含两个值的单个对象,我可能更喜欢它,但为简单起见,我们只使用两个值来说明),一个带有值,一个带有到期时间。

Session["Name"] = "Bob";
Session["NameExpiry"] = DateTime.UtcNow.AddMinutes(5);

然后,无论您使用该值,请检查其到期时间:

if (Session["NameExpiry"] != null && DateTime.Parse(Session["NameExpiry"]) < DateTime.UtcNow)
{
    Session["Name"] = null;
    Session["NameExpiry"] = null;
}

您可以投入各种错误检查、值上的其他逻辑等。但主体是相同的。本质上,不要认为它试图设置某种后台计时器来主动使会话数据过期,考虑将过期时间存储为会话数据的一部分,并在该时间戳之后下次使用它时静默过期.


推荐阅读