您可以将特定会话变量设置为仅存在 5 分钟吗?

1 c# asp.net session webforms

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

例如,如果我有变量:

Session["Name"] = "Bob";
Run Code Online (Sandbox Code Playgroud)

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

例子:

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

我知道这些会话变量会在 IIS 内控制的超时后过期,但我试图在每隔 5 分钟超时发生之前使它们过期,这可能吗?

Dav*_*vid 6

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

Session["Name"] = "Bob";
Session["NameExpiry"] = DateTime.UtcNow.AddMinutes(5);
Run Code Online (Sandbox Code Playgroud)

然后,无论您在何处使用该值,请检查其过期时间:

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

您可以添加各种错误检查、值上的其他逻辑等。但原理是相同的。从本质上讲,不要将其视为尝试设置某种后台计时器来主动使会话数据过期,而是将过期时间存储为会话数据的一部分,并在下次使用该时间戳后静默使其过期。