我在asp.net c#中有一个项目。我没有使用表单身份验证。我有简单的登录页面。当用户成功登录用户重定向到仪表板并且会话[“用户”]也生成了。但问题是当用户不要使用网站20分钟或超过20分钟,当用户回来时尝试使用it.session已过期。用户重定向到再次登录页面。 我也在web.config文件中使用以下脚本
<sessionState timeout = "500" mode = "InProc" />
这是因为空闲时间是否因为我的空闲时间是20分钟。 IS空闲时间总是应该大于会话超时吗?我希望会话活动8到9小时或最大或用户不按下注销按钮
答案 0 :(得分:1)
无法从配置中更改默认值20。但您可以从IIS更改此时间。
在IIS中检查它。 打开IIS,单击“应用程序池”,为应用程序选择“应用程序池”。
右键单击 - &gt;选择属性
在
中效果标签
将空闲超时设置为“闲置.....分钟后关闭工作进程”所需的分钟数。
之后重启IIS。
答案 1 :(得分:0)
将会话时间设置为大于1小时的任何时间将导致内存中保留过多内存,IIS会话期间保留所有会话内存。在高流量站点上设置超时值5小时,为数千名用户提供会话数据&#39;会话。
要解决此问题,我们需要自动刷新应用程序中的网页以创建回发。这可以使用元刷新标记来完成。
首先将以下标记添加到母版页:
<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中设置值,因此可以忽略此默认值。
将以下代码添加到Keep_SessionAlive.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分钟,您的自动刷新方法与滑动到期相结合,也会使会话保持活动状态。