如何在ASP.NET中增加会话超时时间?

23

我尝试了以下代码来延长会话超时时间,但没有起作用,

代码如下:

<sessionState mode="InProc" cookieless="true" timeout="60">
</sessionState>

同时也在代码处

void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Session.Timeout = 15;
}

这应该可以工作。你是如何检查你的会话是否超时的? - Paddy
1
看看这个问题:https://dev59.com/42oy5IYBdhLWcg3wScBB。 - Ehsan
6个回答

36

您可以通过以下任何一种方式增加asp.net中的会话超时时间:

使用 IIS 版本 7 :

  1. 打开IIS
  2. 从站点列表中选择您的网站
  3. 在右侧单击Session state
  4. 现在在cookie设置下输入您的会话超时时间

或者

Web.config : 打开您的web.config文件,在system.web部分下添加以下内容:

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

用您想要的任意数字替换20。

Global.asax文件 :Session_Start方法下,像这样设置会话的timeout属性以达到所需的值。

Session.Timeout = "20";

注意:如果你在IIS和web.config中都设置了会话超时时间,那么IIS中的会话超时时间将覆盖在web.config中设置的超时时间。

希望这可以帮到你!


1
你在示例中忘记关闭sessionState标签了。你应该写成:<sessionState timeout="20" mode="InProc" />。 - miguelbgouveia
2
实际上,在 IIS 7 下,将会话设置在一个地方也会在另一个地方进行设置。如果您在 IIS 中进行了设置,则会自动更新 Web.config,反之亦然。 - d512
2
@MuhammadAwais - 这是分钟。 - skywalker2909
如果你在web.config文件中定义了如下内容:<sessionState timeout="20" mode="InProc"/> - Fer R
1
如果您在 Web.config 文件中定义了以下内容: <sessionState timeout = "20" /> 则可以在代码中重复此设置: Session.Timeout = 20 此外,若需要更长时间的会话(例如我需要 60 分钟),则必须设置应用程序池。请进入 IIS 管理界面,然后转到应用程序池,接着选择“高级设置”,再进入“处理模型”选项卡,将“空闲超时(分钟)”设置为 60 即可。 如果您的网站使用身份验证,则 cookie 身份验证过期时间必须至少是会话时间的两倍。如果您在每个请求中更新过期时间,请确保根据 FormsAuthentication.RequireSSL 的设置来设置 Secure 属性。 - Fer R
显示剩余4条评论

3
如果您使用表单身份验证,则会话超时的默认值为30分钟。尝试使用以下代码增加会话超时时间。
<system.web>
  <authentication mode="Forms">
      <forms timeout="70"/>
  </authentication>
  <sessionstate timeout="80"/>
</system.web>

我认为这段代码会对你有所帮助。

你好,能告诉我这两个超时值之间的区别吗?即Forms超时和Sessionstate超时。 - Nitin Sawant
@NitinSawant - 这里有一个现成的stackoverflow答案来回答你的问题 --- https://dev59.com/9GMm5IYBdhLWcg3wKsnO - skywalker2909

2

简单地说,进入WebConfig,然后进行设置即可。

        <system.web>
    <sessionState timeout="60"></sessionState>
  <compilation debug="true" targetFramework="4.0" />
</system.web>

1
<system.web>
  <authentication mode="Forms">
      <forms timeout="70"/>
  </authentication>
  <sessionState timeout="80"/>
</system.web>

对我来说有效,将其复制到您的web.config文件中。


0

我想添加我的最终解决方案。在阅读了将其设置在配置中是“不正确”的内容后。

            if (model.RememberMe)
            {
                var ASPCookie = Request.Cookies["ASP.NET_SessionId"];
                ASPCookie.Expires = DateTime.Now.AddDays(15);
                Response.SetCookie(ASPCookie);
            }

0
 <sessionState cookieless="false" timeout="30" mode="InProc"/>
  <authentication mode="Forms">
      <forms name="AppRootForms" loginUrl="LoginPage.aspx" protection="All" timeout="30" path="/" slidingExpiration="true"/>
    </authentication>
<system.webServer>
     <!--<max limit for storing session />-->
    <asp>
         <session allowSessionState="true" max="100000" timeout="00:30:00" />
    </asp>
</system.webServer>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接