我在这里看到inproc asp.net会话重置每次访问(读或写)时都会超时。我的问题是,如果我只读取了sessionID,那么超时也被重置了吗?

示例:会话超时设置为20分钟。 15分钟后不活动我加载页面并读取Session.SessionID。 10分钟后会话是否仍然存在?

还有一个问题:如果页面直接加载或通过AJAX访问是否重要?

有帮助吗?

解决方案

在我看来,你混合了两个不同的东西:从Session状态(在代码中)读取值不同于将SessionState的实例附加到当前Request。

除非我非常错误,否则无论何时访问Session对象(在代码中),都不会刷新超时,而是在提供新请求时刷新。发生这种情况是因为SessionState项本身已添加到Cache(并设置了过期策略)

所以,回答你的问题:超时不会被重置。

详细说明您给出的示例:超时将在页面的 load 上重置,而不是在代码中读取SessionID时重置。

其他提示

访问SessionID不会影响会话超时。如果你看一下Reflector,SessionID属性(在HttpSessionStateContainer中实现)如下所示:

public string SessionID
{
    get
    {
        if (this._id == null)
        {
            this._id = this._stateModule.DelayedGetSessionId();
        }
        return this._id;
    }
}

不接触底层存储的项目。

此外,在该级别,请求来自哪里(ajax / normal)无关紧要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top