2009-10-29 4 views
16

セッション中に2つのオブジェクトを保存します。どういうわけか、別のユーザーのオブジェクトの1つが別のユーザーのセッションに読み込まれました。ユーザーはこの特定のデータへのアクセス権を持っていないはずであり、見た直後に何かが間違っていることが分かっていました。StateServerを使用したASP.NETセッションミックス(SCARY!)

私たちは彼に提示されたデータの視覚的証拠を持っています、そして、確かにセッションが混ざり合っていなければ起こることはできませんでした。これはわからない非常に恐ろしい状況です(再現できません)。私たちの唯一の答えは、セッション変数を混在させるためにASP.NET StateServerを責めることです。これはまったく受け入れられず、私たちを悪い立場にしています。

私たちのアプリケーションは、StateServer cookieless="false"セッションモードとFormsAuthenticationを使用して、IIS6を搭載したWindows Server 2003上で動作するASP.NET 2.0アプリケーションです。

誰か他にこの問題がありましたか?どうすれば解決できますか?

+0

私はこれを見ましたが、.Net 1.1では見ました。 tは2.0で修正されました。私は答えを投稿しようとする前にいくつか質問があります。最初の質問、あなたはクッキーレスセッションを使用していますか? – David

+0

ありがとう!はい、cookieless(それは質問で言う)。 –

+0

申し訳ありません...それを読んでいませんでした。 cookielessセッションを使用することは、セッションIDがクエリーストリングパラメータとしてURLに含まれていることを意味するので、2人のユーザー間でSessionID querystringパラメータが異なることを確認しましたか? – David

答えて

12

を私たちは、私の前の会社では、この正確な問題に遭遇し、それをデバッグするために3週間かかりました。 ASP.NETはユーザーに他のユーザーのセッション状態を与えていました。デバッグ環境で複製することは本当に不可能でした。

私たちが見つかったときの修正は、web.configのなんらかのものでした。私はそれを完全に覚えていないので、私はグーグルで時間を過ごした。この問題には、出力キャッシングと関係があると私は考えています。この記事の「セッションと出力のキャッシュ」をご覧ください。

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm(記事は7月にジェフ・プロシースでMSDN誌の2006年版をこれらの10件の共通ASP.NET落とし穴を回避することにより、円滑な稼働サイトをキープと題される)

それがあなたのシナリオでは、その後、修正のように聞こえる場合web.configのenableKernelOutputCacheオプションを無効にしているだけかもしれません。

幸運。

+0

私はあなたが正しいと信じています!実際には* one * webフォームで出力キャッシュを有効にしていましたが、そのフォームは紛らわしいセッション変数に値を設定する責任がありました。あなたは聖人、学者、紳士、天才であり、私は十分にあなたに感謝することはできません! –

+0

+1。ジョシュはあなたのリンクで指摘されているように、セッション全体ではなく、1つの変数だけがスワップされていると言いました。 – wtaniguchi

+0

明確にするために、私は1つの変数がスワップされているという証明のみを持っています。 –

5

まず、自分のコードでバグを探してください。これははるかに可能性の高い説明です。例えば。静的フィールドまたはユーザー固有のデータ用のASP.NETキャッシュなどの他の共有メモリを使用します。

+0

私はちょうどこれをやって最後の10日間を過ごす。私は理由のために私の質問で「確かに」という言葉を強調しました。私を信じて、私たちのコードは防弾です。 –

+0

さらに、このアプリは数年間生産されており、この問題は一度しか発生していません。 –

+0

+1ジョシュが描いているようなものを見るたびに、それが原因です。 – kemiller2002

0

何回発生しましたか?ブラウザーを使用しているユーザー、またはセッションIDでお互いにリンクを送信しているユーザーを確認しましたか?

State Serverのバグを確認する1つの方法は、別のセッションマネージャに切り替えることです.SQL Serverを使用できる場合、または使用する場合はin-procにフォールバックしますが、最初にバグを再現する方法を見つける方がよいでしょう。それをテストすることができます。

+0

これは1回だけ発生しました。ブラウザのバックは間違いなく、ユーザー認証ではいつでもこのデータへのアクセスを許可しないからです。セッションIDをハッキングするようなことはしません。ユーザーは、セッションが何であるか分からない高齢のビジネスマンです。 –

3

可能な回答 - cookielessセッション状態を使用して同様のことが報告されました。

session showing something wrong

編集 -

別の可能な答えを追加しました:

An ASP.NET page is stored in the HTTP.sys kernel cache in IIS 6.0 when the ASP.NET page generates an HTTP header that contains a Set-Cookie response

+0

David、私は間違っていた。セッションモードはcookielessではありません。 –

+0

+1で編集された2番目のリンクが有望であるためです。 – GBegen

0

2人の交差ユーザーが同じキャッシュプロキシを使用していますか?その場合、特に、プロキシが正常に動作していない場合、URLが一致した場合に、あるユーザーが別のユーザー用にキャッシュされたデータを参照する可能性があります。

これはGoogle Web Acceleratorプロジェクトの主な問題ではありませんでしたか(現在は販売終了)

0

この問題が発生した場合、部分的なビューでOutputCache属性であることが判明しました。

関連する問題