2011-02-01 82 views
1

我在我的MVC 3应用程序中使用DotNetOpenAuth的openid选择器。每当我设置一个会话变量并且DotNetOpenAuth部分在web.config中时,我的会话变量在重定向之后不会粘住。我检查了Session.SessionID变量,它仍然是相同的,所以我在同一个会话中(我相信),但是当我检查会话变量后,我只是在重定向后设置它们都设置为空。DotNetOpenAuth ASP.NET MVC 3会话问题

我还没有看到任何其他人与此问题。我想知道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。所以有些东西是随机的(或者不是那么随意)删除我的会话变量!

回答

1

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

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

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

0

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

+0

欣赏答案,事情是,它发生在我的开发服务器上,无论是在IIS中,还是在运行ASP.NET开发服务器时。不明白发生了什么事。我删除DotNetOpenAuth一切正常。我会做更多的研究,看看会议是否正在重新启动以及导致它的原因。 – Darye 2011-02-01 15:25:24

1

不是最好的答案,但我发现它是由于某种原因正在查杀会话变量的response.redirect。

所以我只是让它做一个JavaScript重定向,而不是会话保持,一切工作正常。仍然真的不知道真正的问题在这里,但是,嘿,我没有一整天的时间来弄明白。

+0

小心使用土布重定向。 DotNetOpenAuth可以根据消息有效载荷的大小使用301重定向或JavaScript重定向。如果你自己这样做,希望你的代码在面对DotNetOpenAuth可能获得的多样性时具有弹性。 – 2011-02-02 05:01:41

0

DotNetOpenAuth在其代码库中的任何地方肯定没有Session.AbandonSession.Clear。似乎可能的是,如果您在之后设置了Cookie ,则重定向已发送给客户端,以致这些Cookie将丢失。会话变量通常不会作为cookie单独持续存在,所以如果你使用会话cookie(显然它似乎有),那么你的状态的其余部分应该在那里。

通过实现您自己的会话存储并监视实际情况,深入了解这一点会很有趣。