【问题标题】:Is the ASP.Net Inproc session timeout reset if the SessionID is accessed?如果访问 SessionID,是否会重置 ASP.Net Inproc 会话超时?
【发布时间】:2009-03-09 19:21:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net session-state


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,这完全符合要求 :-)
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多