none
设置iis和web.config中session超时时间无效的问题 RRS feed

  • 问题

  • 希望设置SESSION时间长才超时,但是始终20分钟就超时了,怎么设置都没有用,我是不是哪里写错了,希望指点,谢谢!这个DEBUG实在是太糟心了,改了之后要过20分钟才能看到有没有写对……

    login.aspx(简化):

    <script runat="server">
        Protected Sub Unnamed_Click(sender As Object, e As EventArgs)
            Session("username") = username.Text
        End Sub
    </script>
    
    <asp:Content ContentPlaceHolderID="MainContent1" runat="server" >
        <asp:TextBox runat="server" ID="username"></asp:TextBox>
        <asp:TextBox runat="server" ID="password"></asp:TextBox>
        <asp:Button Text="确认" runat="server" OnClick="Unnamed_Click"  />
    </asp:Content>

    web.config的内容如下,并且iis(WIN10自带的版本)中【会话状态】也已经设置了相同的内容。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.web>
            <sessionState timeout="500" mode="InProc" cookieless="UseCookies" />
        </system.web>
    </configuration>

    不知道为什么,超时时间还是20分钟不是500分钟。

    看到网上有提到

    mode为InProc可能造成Session丢失的情况:

      1>. ASP.NET进程(aspnet_wp.exe)、IIS进程(w3wp.exe)默认的20分钟重启应用程序;

      2>. 缓冲池填满后重启;

      3>. 进程保护措施重启。

    但是不知道应该如何解决?是否一定要使用StateServer模式?

    2018年8月12日 14:44

答案

  • 自己终于搞定了,还是IIS的回收机制。除了设置会话时间(web.config)以外,还需要在俩地方进行设置。在应用程序池,选择对应的应用程序池,右键,高级设置。如下图部分修改

    2018年8月13日 5:45

全部回复

  • 可能是IIS应用程序池(Application Pool)的原因,它会定期回收资源,500是无效的值。

    应用seesion时,先要判断它是否存在以解决失效的问题,可以改用查询字符串,viewstate, cache(也有失效的问题) 

    或是改用 redis,参考这里

    https://github.com/Azure/aspnet-redis-providers


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年8月13日 0:33
  • 你好,谢谢你的回答!我也改了应用程序池的回收时间,但是还是无效……
    2018年8月13日 3:45
  • 自己终于搞定了,还是IIS的回收机制。除了设置会话时间(web.config)以外,还需要在俩地方进行设置。在应用程序池,选择对应的应用程序池,右键,高级设置。如下图部分修改

    2018年8月13日 5:45