【问题标题】:Why isnt the session timeout working when set to SqlServer?为什么设置为 Sql Server 时会话超时不起作用?
【发布时间】:2011-10-30 15:13:53
【问题描述】:

我有电话:

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />

它将会话存储在 sql 状态服务器中。但是,它不会在一分钟后正确超时。

当我将线路更改为使用 InProc 模式时:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />

一分钟后超时。

任何想法为什么会发生这种情况?使用 SqlServer 时如何让它超时?

【问题讨论】:

    标签: asp.net iis session-timeout


    【解决方案1】:

    您可以通过设置表单身份验证cookie的超时来控制会话的超时:

    FormsAuthenticationTicket authTicket = 
    new FormsAuthenticationTicket(1, // version
    txtUserName.Text,
    DateTime.Now, 
    DateTime.Now.AddMinutes(1),
    false,@"\");
    

    这样用户会在 1 分钟后与会话失去联系。

    【讨论】:

    • 表单身份验证超时和会话超时是两个不同的东西。
    【解决方案2】:

    如果您使用的是 SQL Server Express,这是因为没有 SQL Server 代理来执行 DeleteExpiredSessions 过程。

    以下是该问题的可能解决方法:

    在更新会话的存储过程中,我添加了 SQL 从 DeleteExpiredSessions 过程到存储的更新会话 程序(我不记得名字)所以它检查旧会话, 删除旧会话,然后更新当前会话。这 无论如何,更新会话的存储过程在每次点击时都会运行, 所以我在会话之前添加了另外两行删除旧会话 已更新。这似乎工作正常。

    【讨论】:

      【解决方案3】:
      1. 确保 SQL Server 代理服务正在运行

      2. 右键单击名为 ASPState_Job_DeleteExpiredSessions 的 SQL Server 代理作业并单击“查看历史记录” - 确保该作业每 1 分钟成功运行一次。

      就我而言,不知何故(可能在涉及命名实例的多个安装之一期间)我的 SQL Server 代理将其属性 Connection -&gt; Alias Localhost Server 设置为仅服务器名称而不是服务器名称\实例名称。

      发生此更改时,ASPState_Job_DeleteExpiredSessions 似乎无限期地运行并且无法停止。因此,我尝试重新启动 SQL Server 代理服务,但它不会重新启动。但是,一旦我将 Connection -&gt; Alias Localhost Server 属性更改为 servername\instancename,SQL Server 代理就会立即备份,ASPState_Job_DeleteExpiredSessions 作业开始每分钟成功运行一次……这显然解决了我的超时问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        相关资源
        最近更新 更多