1

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

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

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

4

2 回答 2

1

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

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

右键单击->选择属性

在里面

性能选项卡

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

之后重新启动 IIS。

于 2015-02-20T11:23:30.953 回答
0

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

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

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

<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 分钟,您的自动刷新方法与滑动到期相结合,也会使会话保持活动状态。

于 2015-02-20T11:48:28.573 回答