我读here每次访问(读或写)时,inproc asp.net会话都会重置它的超时。我的问题是,如果我只读取了sessionID,那么超时也被重置了吗?
示例:会话超时设置为20分钟。 15分钟后不活动我加载页面并读取Session.SessionID。 10分钟后会话是否仍然存在?
还有一个问题:如果页面直接加载或通过AJAX访问是否重要?
答案 0 :(得分:2)
在我看来,你混合了两个不同的东西:从Session状态(在代码中)读取值不同于将SessionState的实例附加到当前Request。
除非我非常错误,否则无论何时访问Session对象(在代码中),都不会刷新超时,而是在提供新请求时刷新。发生这种情况是因为SessionState项本身已添加到Cache(并设置了过期策略)
所以,回答你的问题:超时不会被重置。
详细说明您给出的示例:超时将在页面的 load 上重置,而不是在代码中读取SessionID时重置。
答案 1 :(得分:1)
访问SessionID不会影响会话超时。如果你看一下Reflector,SessionID属性(在HttpSessionStateContainer中实现)如下所示:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
不接触底层存储的项目。
此外,在该级别,请求来自哪里(ajax / normal)无关紧要。