【问题标题】:DotNetOpenAuth ASP.NET MVC 3 Session IssueDotNetOpenAuth ASP.NET MVC 3 会话问题
【发布时间】:2011-02-01 06:41:28
【问题描述】:

我在我的 MVC 3 应用程序中使用带有 DotNetOpenAuth 的 openid-selector。每当我设置会话变量并且 DotNetOpenAuth 部分位于 web.config 中时,我的会话变量在重定向后不会粘住。

我检查了 Session.SessionID 变量,它仍然是相同的,所以我在同一个会话中(我相信),但是当我检查我刚刚在重定向后设置的会话变量时,它们都设置为 null。

我还没有看到其他人遇到这个问题。我想知道 DotNetOpenAuth 是否还没有为 MVC 3 做好准备。我也在使用最新版本的 DotNetOpenAuth。

如果有帮助,这里是 web.config 的相关部分:

<configSections>
    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
  </configSections>
  <uri>
    <idn enabled="All"/>
    <iriParsing enabled="true"/>
  </uri>
  <system.net>
    <defaultProxy enabled="true"/>
    <settings>
      <servicePointManager checkCertificateRevocationList="true"/>
    </settings>
  </system.net>
  <dotNetOpenAuth>
    <openid>
      <relyingParty>
        <security requireSsl="false"/>
        <behaviors>
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth"/>
        </behaviors>
      </relyingParty>
    </openid>
    <messaging>
      <untrustedWebRequest>
        <whitelistHosts>
          <add name="localhost"/>
        </whitelistHosts>
      </untrustedWebRequest>
    </messaging>
    <reporting enabled="true"/>
  </dotNetOpenAuth>

更新:

它发生在我的开发服务器上,无论是在 IIS 中,还是在我运行 ASP.NET 开发服务器时。

另外,我尝试使用状态服务器在进程内和进程外运行会话,但没有任何区别。

关于新会话,我检查了 session_start 事件,但没有被调用。我还检查了 Session.IsNewSession,它也返回了 false。所以有些东西是随机的(或者可能不是那么随机)删除我的会话变量!

【问题讨论】:

    标签: c# asp.net-mvc-3 dotnetopenauth


    【解决方案1】:

    不是最好的答案,但我发现是 response.redirect 出于某种原因杀死了会话变量。

    所以我只是让它做一个 javascript 重定向,会话保持不变,一切正常。仍然真的不知道这里真正的问题是什么,但是,嘿,我没有一整天的时间来弄清楚。

    【讨论】:

    • 谨慎使用朴素的重定向。 DotNetOpenAuth 可以根据消息有效负载的大小使用 301 重定向或 javascript 重定向自身。如果您自己执行此操作,希望您的代码在面对您可能从 DotNetOpenAuth 获得的这种多样性时具有弹性。
    • 在 Twitter oAuth 回调后我遇到了同样的问题。我会尝试 javascript 重定向,看看是否有效。
    【解决方案2】:

    在这里发现了问题(很久以前)。显然,MVC2 并不关心我是否对我的操作有看法,我只是做了一些处理然后重定向。

    但是从 MVC3 开始,在我升级之后,如果我的操作没有视图,页面会注册一个错误,一旦出现错误,框架就不会存储我刚刚设置的会话变量。

    如此简单的修复...添加视图,然后确保视图中没有错误。

    【讨论】:

      【解决方案3】:

      这应该可行。我已经将 DotNetOpenAuth 与 ASP.NET MVC 3 一起使用,没有任何问题。您可能希望在用户在远程站点上进行身份验证期间检查您的会话是否过期。您获得相同 SessionId 的事实并不意味着会话尚未过期。如果服务器重新启动 AppDomain,也会发生这种情况。

      【讨论】:

      • 欣赏答案,问题是,它发生在我的开发服务器上,无论是在 IIS 中,还是在我运行 ASP.NET 开发服务器时。不明白发生了什么。我删除 DotNetOpenAuth 一切正常。我会做更多的研究,看看会话是否正在重新启动以及是什么原因造成的。
      【解决方案4】:

      DotNetOpenAuth 的代码库中当然没有 Session.Abandon 或 Session.Clear。如果您在 之后设置 cookie,则似乎有可能将重定向发送到客户端,这些 cookie 将丢失。会话变量通常不会单独作为 cookie 保存,所以如果您的会话 cookie 成功了(显然它似乎有),那么您的状态的其余部分应该在那里。

      通过实现您自己的会话存储并监控实际情况来深入研究这一点会很有趣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        相关资源
        最近更新 更多