【问题标题】:Asp.net Session expiring automatically after few seconds几秒钟后,Asp.net 会话自动到期
【发布时间】:2013-01-06 17:29:14
【问题描述】:

当用户登录时,我将 user_id 存储在 Session 变量中,并且在第二页上,我正在检查页面加载,如果 user_id 存在则很好,否则重定向到登录页面,但是当我登录并在几秒钟后重定向到下一页时刷新页面我的会话在那里为空,我被重定向到登录页面它发生在整个应用程序中我尝试了所有解决方案但都是徒劳的

另一件事是应用程序在开发服务器和 LAN 中的本地 IIS 上运行良好,但在实时服务器上出现此问题。

请提出解决方案,我还在 web.config 的 Proc 中定义会话超时(以分钟为单位)和模式。

提前致谢

【问题讨论】:

标签: asp.net session session-state session-timeout


【解决方案1】:

如果您使用 InProc 会话状态模式和应用程序池中的多个工作进程,则 Session 可能会在几秒钟后自动到期,因为如果同一会话的不同请求由不同的工作进程提供服务,则可能会发生数据丢失。

就我而言,我使用 InProc 会话状态模式,最大工作进程设置为 4,因此 会话即将到期

设置Maximum Worker Process = 1 解决了它

【讨论】:

    【解决方案2】:

    您可以在 web.config 中添加 <httpRuntime delayNotificationTimeout=""/>see more

    试试这个

    <authentication mode="Forms">
      <forms loginUrl="/loginurl" timeout="2880" />
    </authentication>
    

    【讨论】:

    • 在本地工作正常,也在 IIS LAN 上工作,但部署服务器会话在几秒钟后意外到期
    • @EhsanSajjad 你在开发和实时服务器上使用相同的 web.config 吗?
    • 这会做什么? @Amol
    • 不知道为什么您会认为这些 web.config 值会改变与进程内会话相关的任何内容。
    【解决方案3】:

    在 web.config 中试试这个

    <configuration>
     <system.web>
       <sessionState mode="InProc" timeout="90"></sessionState>
     </system.web>
    </configuration>
    

    【讨论】:

      【解决方案4】:

      我刚刚遇到的一个会话问题在这里可能会有所帮助,那就是某些公司的用户会很快结束他们的会话,但其他用户没有问题。经过大量测试,我发现从办公室连接到网站的用户有问题,但从家里连接的同一用户没有问题。

      他们的公司设置为对所有出站 Web 请求使用单个 IP(或一组 IP)。好吧,这家公司有多个 IP 用于外部访问,并且每个请求都会更改(或可能更改)IP。这将重置我网站上的会话并将其注销。

      我仍在执行修复或检查此问题的过程中,因此我无法为您提供万无一失的修复,但这是值得研究的。这将解释发生在你身上的事情。

      【讨论】:

        【解决方案5】:

        您是否有机会使用服务器集群?网络负载平衡可能每次都将客户端重新路由到不同的服务器。如果是这样,要么必须重新配置 NLB 以将客户端保持在单个服务器上,要么设置会话共享。

        还要检查应用程序池是否存在一些过于频繁地自行回收的淫秽规则。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-21
          • 1970-01-01
          • 1970-01-01
          • 2011-01-29
          • 2014-10-24
          • 1970-01-01
          • 1970-01-01
          • 2015-06-03
          相关资源
          最近更新 更多