【发布时间】:2009-03-09 19:21:43
【问题描述】:
我读到here,每次访问(读取或写入)时,inproc asp.net 会话都会重置它的超时。我的问题是,如果我只读取 sessionID 也会重置超时?
示例:会话超时设置为 20 分钟。 15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?
还有一个问题:页面是直接加载还是通过AJAX访问有关系吗?
【问题讨论】:
标签: asp.net session-state
我读到here,每次访问(读取或写入)时,inproc asp.net 会话都会重置它的超时。我的问题是,如果我只读取 sessionID 也会重置超时?
示例:会话超时设置为 20 分钟。 15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?
还有一个问题:页面是直接加载还是通过AJAX访问有关系吗?
【问题讨论】:
标签: asp.net session-state
在我看来,您混淆了两种不同的东西:从 Session 状态(在代码中)读取值不同于将 SessionState 的实例附加到当前请求。
除非我非常错误,否则每当您访问 Session 对象(再次,在代码中)时都不会刷新超时,而是在处理新请求时刷新。发生这种情况是因为 SessionState 项本身已添加到缓存中(并且设置了过期策略)
所以,回答你的问题:超时不会被重置。
详细说明您给出的示例:超时将在页面的加载时重置,而不是在您读取代码中的 SessionID 时。
【讨论】:
访问 SessionID 不会影响会话超时。如果你看一下 Reflector,SessionID 属性(在 HttpSessionStateContainer 中实现)如下所示:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
不会触及底层存储的项目。
此外,在那个级别上,请求来自哪里(ajax/normal)并不重要。
【讨论】: