我有ASP.NET默认页面,它清除page_load方法中的所有会话变量,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session.RemoveAll();
}
}
但我想在page_load方法中删除仅超过15分钟的会话变量。
如何只删除旧的会话变量?
答案 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);