0

セキュリティ上の理由からユーザーのログインを必要とする最初の Web アプリケーションを作成していますが、テスト中に、あるユーザーによるデータ入力が別のユーザーからのもののようにデータベースに表示されることに気付きました。これは非常に素朴に聞こえるかもしれませんが、リモート サーバー上にあるアプリケーションが、その時点で誰が使用しているのか混乱する可能性はありますか? (私は自分自身をあまり明確にしていないことを知っています)、2 人の同時ユーザーがいる場合、ルート アプリケーションはどのようにして誰が何をしているかを判断しますか?
静的クラスを使用してメンバーシップ データを保持し、Web アプリ全体で表示できるようにします。たぶんそこに何か問題がありますか?長い間デスクトップ アプリを作成してきましたが、「エンジン ルーム」がデスクトップから離れた場所にあるアプリを作成したのはこれが初めてです。

4

1 に答える 1

1

あなたの実際のコードがどのように見えるかはわかりませんが、「静的」と言ったので、これが最初に想像するものです:

public class CurrentUser
{
   public static string UserName{get;set;}  
}

上記は、UserName プロパティが AppDomain 全体で共有されることを意味します。これは、ASP.NET アプリでは Web サイト全体 (同じ IIS サーバー上の他の Web サイトを除く) を意味します。そのため、誰が最初に値を設定できるかを競いますが、値は最後に書き込んだ人の値として読み取られます。Joe がログインし、Jack がログインし、Joe が DB にレコードを書き込み、Jack の名前を取得する静的な値をチェックします。

これを行うためのより適切な方法は、HttpContext ユーザーまたはスレッド ユーザー** を設定することです。どちらも、System.Web を参照する任意の場所および任意のアセンブリで使用できます。FormsAuthenticationおよび Membership 機能を可能な限り活用することをお勧めします。セッションに名前を保存することはできますが、セッション Cookie は、フレームワークで提供される認証ライブラリよりも安全性が低くなります。

** スレッド ユーザーは、System.Web を参照しなくても使用できますが、認証時にスレッド ユーザーを設定した場合に限ります。

于 2012-10-20T21:40:29.830 に答える