【问题标题】:InProc session timeout not workingInProc 会话超时不起作用
【发布时间】:2016-01-21 17:02:59
【问题描述】:

我正在使用 asp .NET MVC 应用程序,并且我已经配置了

<system.web><sessionState mode="InProc" timeout="90" /></system.web>

但是看起来会话仍然只有 20 分钟而不是 90 分钟,为什么?

我怎样才能使这个有效而不是 20(我想默认)

我检查了应用程序池中的空闲时间,是 20,这是导致超时的原因吗?如果是,我如何从配置文件中覆盖它?

【问题讨论】:

  • 嗨 Clement,不,应用程序池中的空闲超时不会配置会话超时。 IIS 使用它来关闭不活动的工作进程

标签: asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

因为 IIS 每隔 x 分钟重新启动一次池(包括会话)而没有活动,由池本身设置中的空闲超时配置,如果用户在应用程序中设置 90 分钟的会话,如果没有活动,IIS 可以在这 90 分钟结束之前重新启动池。示例:

会话为 60 分钟,在 app.config 中配置 闲置 30 分钟后,池自行回收 只有一个人使用该应用程序

1.00pm:用户连接,他在 10 分钟内导航,然后在页面上什么都不做(因为 instacne 填写一个非常大的表单而不提交,也没有 ajax 调用。此时,用户会话“打开”直到凌晨 1.00 + 10 分钟 + 60 分钟配置 = 2.10 am 凌晨 1.50 时,他尝试按下提交按钮,但它不起作用,因为应用程序池在 1.40(1.10 + 30 分钟空闲)回收,因此用户丢失了会话。

如果这可能是用户在应用程序上的anole,则空闲时间必须相同或大于会话时间。

【讨论】:

    【解决方案2】:

    您发布的配置似乎正确。

    尝试检查您的 IIS 配置。来自thisTechNet 链接:

    1. 打开 IIS 管理器并导航到您要管理的级别。
    2. 在功能视图中,双击 ASP。
    3. 在 ASP 页面上的“服务”下,展开“会话属性”。
    4. 在超时字段中,输入格式为 hh:mm:ss 的超时值。例如,输入 00:15:00 表示 15 分钟。
    5. 在“操作”窗格中,单击“应用”。

    如果您使用表单身份验证,请记住它使用他自己的超时,可以设置如下:

    <system.web>
        <authentication mode="Forms">
              <forms timeout="90"/>
        </authentication>
    
        <sessionState mode="InProc" timeout="90"  />
    </system.web>
    

    【讨论】:

    • 我已经在应用池中编辑了idle,它似乎可以工作(我已经测试过了)
    • 看起来很奇怪,因为应用程序池的空闲超时用于其他目的。参考这个:stackoverflow.com/questions/9707535/…
    • 会话设置为 60,应用程序池设置为 20,如果用户在 1.00 连接然后没有活动,则在 1.20,应用程序池回收池并且会话被“清理”,不是吗?
    • 没错,在我上次发表评论后,我意识到它是如何工作的,但我忘了修改评论;)
    猜你喜欢
    • 2010-12-02
    • 2014-12-05
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多