【问题标题】:idle time out always should be greater than session time out?空闲超时总是应该大于会话超时?
【发布时间】:2015-02-20 11:05:38
【问题描述】:

我在asp.net c#中有一个项目。我没有使用表单身份验证。我有简单的登录页面。当用户成功登录时,用户重定向到仪表板和会话[“用户”]也生成。但问题是当用户不要使用网站 20 分钟或超过 20 分钟,当用户回来尝试使用它。会话已过期。用户重定向到再次登录页面。 我也在 web.config 文件中使用以下脚本

<sessionState timeout = "500" mode = "InProc" />

这是因为空闲超时还是不是因为我的空闲超时是 20 分钟。 空闲超时是否总是大于会话超时?我希望会话存活 8 到 9 小时或最大值,或者用户不要按下注销按钮

【问题讨论】:

    标签: c# asp.net session state-management


    【解决方案1】:

    无法从配置中更改默认值 20。但是您可以通过 IIS 更改此时间。

    在 IIS 中检查它。 打开 IIS,单击应用程序池,为您的应用程序选择应用程序池。

    右键-->选择属性

    性能标签

    将空闲超时设置为“空闲.....分钟后关闭工作进程”所需的分钟数。

    之后重启 IIS。

    【讨论】:

    • 什么时候通过IIS更改空闲时间。Session不会过期?
    【解决方案2】:

    将会话超时设置为大于 1 小时将导致内存中保留过多的内存,IIS 在会话期间保留所有会话内存。假设在高流量站点上的超时值为 5 小时,保存数千个用户会话的会话数据。

    要解决这个问题,我们需要在应用程序中自动刷新网页以创建回发。这可以通过 meta-refresh 标签来完成。

    首先将以下标签添加到您的母版页:

    <IFRAME ID="KeepAliveFrame" src="KeepSessionAlive.aspx" frameBorder="0" width="0" height="0" runat="server"></IFRAME>
    

    接下来,创建一个名为 KeepSessionAlive.aspx 的新页面。在页面的 head 部分,添加以下行:

    <meta id="MetaRefresh" http-equiv="refresh" content="21600;url=KeepSessionAlive.aspx" runat="server" />
    <script language="javascript">
    window.status = "<%=WindowStatusText%>";
    </script>
    

    这一行的关键是内容值。默认情况下,我们将该值设置为 21600 秒,即 6 小时。但是,我们将在此页面的 Web 应用程序的 Page_Load 中自行设置该值,因此可以忽略此默认值。

    在KeepSessionAlive.aspx.cs的Page_Load中加入如下代码:

        protected string WindowStatusText = "";
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (User.Identity.IsAuthenticated)
            {
                // Refresh this page 60 seconds before session timeout, effectively resetting the session timeout counter.
                MetaRefresh.Attributes["content"] = Convert.ToString((Session.Timeout * 60) - 60) + ";url=KeepSessionAlive.aspx?q=" + DateTime.Now.Ticks;
    
                WindowStatusText = "Last refresh " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
            }
        }
    

    最后一个重要步骤是将 web.config 会话超时值更改为小于 IIS 可能的超时值的值。如果您的值大于 IIS,您的自动刷新将永远不会发生,因为 IIS 在刷新计时器激活之前已经重置了您的会话状态。选择 10 分钟之类的值似乎效果很好。请记住,即使会话超时值为 10 分钟,您的自动刷新方法与滑动到期相结合,也会使会话保持活动状态。

    【讨论】:

    • 我没有使用表单认证
    猜你喜欢
    • 2012-02-17
    • 2013-06-18
    • 2022-08-17
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多