2011-02-01 9 views
1

私はMVC 3アプリケーションでDotNetOpenAuthでopenid-selectorを使用しています。セッション変数を設定し、DotNetOpenAuthセクションがweb.configにある場合は、セッション変数はリダイレクト後に固執しません。DotNetOpenAuth ASP.NET MVC 3セッションの問題

私は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> 

更新:

私はASPを実行すると、それはどちらかのIISで、私の開発サーバ上で起こって、またはされています。 NET開発サーバー。

また、状態サーバーを使用してプロセス中および実行中のセッションを実行しようとしましたが、違いはありませんでした。

新しいセッションに関して、私はsession_startイベントをチェックしましたが、それは呼び出されていません。私もSession.IsNewSessionをチェックし、それもfalseを返しました。だから、何かが無作為に(または無作為に)私のセッション変数を削除している!

答えて

1

ここで問題が見つかりました。明らかに、MVC2は、私がちょうどいくつかの処理を行った後、リダイレクトしたという私の行動のビューがあるかどうかは気にしませんでした。

MVC3からは、アップグレード後、自分のアクションのビューがないと、ページにエラーが登録され、一度エラーが発生すると、フレームワークは設定したセッション変数を保存しませんでした。

単純な修正...ビューを追加し、ビューにエラーがないことも確認します。

0

これは動作するはずです。私は何の問題もなくASP.NET MVC 3でDotNetOpenAuthを使用しました。ユーザーが認証のためにリモートサイトにいる間に、セッションが期限切れになっていないことを確認したい場合があります。同じSessionIdを取得しているということは、セッションが終了していないことを意味するものではありません。これは、サーバーがAppDomainを再起動した場合にも発生します。

+0

私の開発サーバーでは、IISで、またはASP.NET開発サーバーを実行しているときに、答えが分かります。何が起きているのか理解していない。私はDotNetOpenAuthをすべて削除します。私はセッションが再開しているかどうか、それを引き起こしているかどうかを調べるためにさらに調査をします。 – Darye

1

最高の答えではありませんが、何らかの理由でセッション変数を強制終了するのはresponse.redirectだとわかりました。

私はちょうど代わりにジャバスクリプトのリダイレクトを行うようにしました。セッションはそのまま残り、すべて正常に動作します。本当の問題がここに何であるかはまだ分かりませんが、ねえ、私はそれを理解する一日を持っていません。

+0

homespunリダイレクトに注意してください。 DotNetOpenAuthは、メッセージペイロードのサイズに基づいて、301リダイレクトまたはjavascriptリダイレクト自体を使用できます。これを自分で行う場合は、DotNetOpenAuthから取得する可能性のあるこの種の面でコードが弾力的であればうまくいけばいいでしょう。 –

+0

TwitterのoAuthコールバックの後も同じ問題が発生しています。私はjavascriptのリダイレクトを試し、そのwortksかどうかを確認します。 – jeremcc

0

DotNetOpenAuthはコードベースのどこにでもSession.AbandonまたはSession.Clearを持っていません。の後にクッキーを設定すると、クッキーが失われる可能性があるリダイレクトがクライアントに送信されている可能性があります。セッション変数は、通常は個別にクッキーとして永続化されるわけではありません。したがって、セッションクッキーが作成した場合(そして明らかにそれがあるように見える場合)、残りの国家はそこにあるはずです。

独自のセッションストアを実装し、実際に何が起こっているのかを監視することでこれを調べることは興味深いでしょう。