2011-02-01 79 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(顯然它似乎有),那麼你的狀態的其餘部分應該在那裏。

通過實現您自己的會話存儲並監視實際情況,深入瞭解這一點會很有趣。