0

我有一个要求,我需要在我的 MVC 4 网站上的用户会话开始时创建一个数据库记录。

入口点控制器的轮廓如下所示:

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

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

   // rest of code
 }

我发现此代码并不完全可靠,因为偶尔会创建重复记录(通常具有相同的创建日期 - 至少到最接近的毫秒)。我只能假设(外部)网页/客户端生成两个几乎同时的请求。

请注意,如果用户稍后返回站点(使用相同的查询字符串参数),那么我希望他们获取现有的 userInfo 记录。

我知道我可以通过向表中添加唯一索引来“解决”问题,无论如何我可能都需要这样做,但我想知道是否有更好的模式可以遵循?

4

1 回答 1

2

当用户注册并将其存储在userInfo数据库的表中时,为用户会话生成一个随机字符串。当用户稍后访问该站点时,您只需检查用户名和密码以进行身份​​验证,如果成功,则您将从数据库中为该用户获取先前存储的唯一随机字符串并将其放入会议。这样,您可以在用户的​​整个生命周期中使用相同的随机字符串。希望这可以帮助

于 2013-01-16T17:58:38.373 回答