我在这里读到,每次访问(读取或写入)时,inproc asp.net 会话都会重置它的超时。我的问题是,如果我只读取 sessionID,是否也会重置超时?
示例:会话超时设置为 20 分钟。15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?
还有一个问题:页面是直接加载还是通过 AJAX 访问有关系吗?
我在这里读到,每次访问(读取或写入)时,inproc asp.net 会话都会重置它的超时。我的问题是,如果我只读取 sessionID,是否也会重置超时?
示例:会话超时设置为 20 分钟。15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?
还有一个问题:页面是直接加载还是通过 AJAX 访问有关系吗?
在我看来,您混淆了两种不同的事物:从 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)并不重要。