2009-03-27 3 views
1

私はフォーム認証を使用するASP.Net 3.0 SP1アプリケーションを持っています。ASP.Net Context.User.Identity weirdness

テスト中に、別のユーザーが表示していたページを表示すると、他のユーザー名がマスターページのコントロールに表示されることに気付きました。 Context.User.Identityは、他のユーザー用です。

他の誰も表示していない別のページに切り替えると、Context.User.Identityが正しいことになります。

私は困惑し、提案を感謝します。
ありがとうございます。
Chris

+0

私は、noobがユーザーデータを誤ってApplicationオブジェクトに入れたときに、それがSessionに入ることが意図されたときに、そのようなことを一度見ました。もちろん、あなたはそうしていないでしょう。 – DOK

+0

私はそうだったが、私はあまり役に立たなかった。 – cvoeller

+0

これをデバッグする方法に関する提案はありますか? – cvoeller

答えて

2

Cookieレスブラウザを使用しているときに認証チケットに付属のリンクを使用していないことを確認してください。

また、リクエスト間でデータを共有している可能性のあるものを必ず確認してください。 DOKが言ったように、しかしアプリケーションがあなたがそれを行うことができる唯一の方法ではないことを忘れないでください。

3

出力キャッシュがページに対して有効になっている可能性があります。ページがVaryByParam = noneのサーバー側にキャッシュされていると、すべてのユーザーがキャッシュから同じコピーを取得します。

私はこれだけを引き起こすことができる2つの事を考えることができます。

  • あなたは静的(C#の)/共有(VB)に要求(例えば間で共有の場所にユーザー固有のデータを保存しています変数、ASP.NETキャッシュ、アプリケーションオブジェクトなど)

  • 出力キャッシュが有効です。

チェックのため:あなたのaspxとASCXファイルで

  • OutputCacheディレクティブ、

  • web.configファイル(複数可)でのsystem.web /キャッシング要素、

  • HttpCacheability.SetCacheabilityメソッドを呼び出します。

あなたは問題が見つからない場合:あなたはまだ望ましくない動作を再現する最も簡単なバージョンを取得するまで

  • は、アプリケーションの簡易版を作成してみてください。

  • この簡略化のプロセスでは、自分自身で問題を発見する可能性があります。そうでない場合は、単純化されたバージョンからいくつかのコードを投稿してください。

+0

私は出力キャッシングを認識せず、VaryByParamはソリューションに含まれていません。 – cvoeller

+0

あなたの助けてくれてありがとう!それを読んだ後。その症状は出力キャッシュを指していたはずです。 しかし、私はあなたのアドバイスを受けて、うまくいったシンプルなウェブサイトを作成しましたが、シンプルなバージョンは問題を解消するのに役立ちました。 – cvoeller

0

targetframe = "_ self"またはTarget = "_ self"を設定しているために問題が発生しているようです。私はこれらすべてを削除し、すべてが正常に動作しているようです。

もう1つ注意:ページを更新すると、正しいユーザーのページも表示されます。