在ASP.NET中删除超过十五分钟的会话变量

时间:2013-11-25 13:01:52

标签: asp.net session pageload

我有ASP.NET默认页面,它清除page_load方法中的所有会话变量,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session.RemoveAll();
    }
}

但我想在page_load方法中删除仅超过15分钟的会话变量。

如何只删除旧的会话变量?

3 个答案:

答案 0 :(得分:1)

您应该将会话过期留给框架,除非您有充分的理由手动执行(您似乎没有)。您可以相应地调整SessionState.Timeout属性,以便会话在15分钟后过期(默认为20分钟),例如

<configuration>
    <system.web>
        <sessionState timeout="15" />
    </system.web>
</configuration>

答案 1 :(得分:1)

我所做的是创建自定义对象,存储我想要保留的实际数据以及时间戳。这样,你就不会改变默认的会话行为,并且不同的对象会以不同的时间间隔到期。

然后,当我执行某些操作时,查看此对象,测量其当前时间的时间戳,并在符合我的时差的情况下清除该对象。

Class mycustomobject
Property thisObject as object '<- store your object you want to keep here, 
                              'even define as type of your specific object...

Property timestamp as datetime
End class

Dim MySessionSaveObject as new mycustomobject

with MySessionSaveObject
.object = 'Whatever you want to save...
.timestamp = now
end with


session(mySessionVar) = MySessionSaveObject

我认为你可以决定其余的吗?

答案 2 :(得分:0)

如果单个项目自动过期,您可以做的是(误)使用缓存的内置超时。使用固定“会话”键的缓存键加上当前的SessionId。然后您还可以指定20分钟的滑动超时。

所以而不是

Session["MyKey"] = value;

你使用

Cache.Insert("MyKey" + Session.SessionID, value, null, 
   TimeSpan.FromMinutes(20), Cache.NoAbsoluteExpiration);