0

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

示例:会话超时设置为 20 分钟。15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?

还有一个问题:页面是直接加载还是通过 AJAX 访问有关系吗?

4

2 回答 2

2

在我看来,您混淆了两种不同的事物:从 Session 状态(在代码中)读取值与将 SessionState 的实例附加到当前请求不同。

除非我大错特错,否则每当您访问 Session 对象(再次,在代码中)时,都不会刷新超时,而是在提供新请求时刷新。发生这种情况是因为 SessionState 项本身已添加到缓存中(并且设置了过期策略)

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

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

于 2009-03-09T11:21:43.957 回答
1

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

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

这不会触及底层存储项目。

此外,在那个级别上,请求来自哪里(ajax/normal)并不重要。

于 2009-03-09T11:21:38.730 回答