0

MVC4Webサイトでのユーザーセッションの開始時にデータベースレコードを作成する必要があるという要件があります。

エントリポイントコントローラの概要は次のようになります。

public ActionResult Index(int userId, int requestId) {
   var userInfo = db.GetUserInfo(userId, requestId);

   if (userInfo == null) {
      userInfo = db.CreateUserInfo(userId, requestId);
   }

   // rest of code
 }

私が見つけたのは、このコードは、非常にまれに重複レコードが作成されるほど完全には信頼できないということです(通常、同じ作成日で、少なくともミリ秒単位で)。(外部の)Webページ/クライアントが2つのほぼ同時にリクエストを生成すると想定することしかできません。

ユーザーが後日(同じクエリ文字列パラメーターを使用して)サイトに戻った場合は、既存のuserInfoレコードを取得するようにします。

テーブルに一意のインデックスを追加することで問題を「修正」できることはわかっていますが、これはおそらくとにかく行う必要がありますが、従うべきより良いパターンがあるかどうかを知りたいですか?

4

1 に答える 1

2

userInfoユーザーセッションを登録してデータベースのテーブルに保存するときに、ユーザーセッションのランダムな文字列を生成します。ユーザーが後日サイトにアクセスするときは、認証のためにユーザー名とパスワードを確認するだけで、成功した場合は、そのユーザーのデータベースから以前に保存された一意のランダムな文字列を取得して、セッション。このようにして、オフユーザーの生涯を通じて同じランダムな文字列を使用できます。お役に立てれば

于 2013-01-16T17:58:38.373 に答える