【问题标题】:ASP.NET MVC RC2 - Session Handling Bug?ASP.NET MVC RC2 - 会话处理错误?
【发布时间】:2010-03-10 13:19:11
【问题描述】:

我的 web 应用程序 (asp.net mvc rc2) 中的会话有问题。该应用程序在 asp.net mvc rc1 上运行良好。

我使用以下代码进行会话超时处理:

 if (cnt.Current.Session != null) 
        {
            if (cnt.Current.Session.IsNewSession) 
            { 
                  string cookie = cnt.Current.Request.Headers["Cookie"];  
                  if ((null != cookie && (cookie.IndexOf("ASP.NET_SessionId") >= 0)) 
                  {
                      return true; 
                  }  
            }    
        }

当 i 成为会话超时时,使用 FormsAuthentication.SignOut(); 方法让用户注销并重定向到登录页面。 新登录后cnt.Current.Session.IsNewSession 始终为真!! (漏洞?) 在 rc1 上工作正常。

【问题讨论】:

  • 你是在 Cassini 还是 IIS 上进行测试?它在 cassini 中不起作用,但可以在 IIS 上运行

标签: asp.net-mvc session


【解决方案1】:

MVC 2 RC1 有一个错误,它错误地为每个用户创建了一个新会话。正确的行为(MVC 2 RC2 展示的)是会话生成被推迟到第一次存储在用户会话中。

如果你从未在 Session 中存储任何东西,那么它就永远不会被保存,并且 IsNewSession 将始终返回 true。如果您打算使用它,请确保您实际上是在 Session 中放入一些东西。

在相关说明中,如果您只是使用它来控制用户何时注销,为什么不缩短 FormsAuth cookie 的过期时间?默认超时时间为 2880 分钟(2 天);您可以在站点的根 Web.config 中更改此设置。这样你就完全不用和 Session 搞混了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2010-09-16
    • 2018-02-27
    • 2016-03-27
    • 1970-01-01
    • 2011-05-26
    • 2011-06-10
    • 2014-03-26
    相关资源
    最近更新 更多