我有一个要求,我需要在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记录。
我知道我可以通过在表格中添加一个唯一索引来解决问题,我可能还需要这样做,但我想知道是否有更好的模式可供使用?
答案 0 :(得分:2)
当用户会话注册并将其存储在数据库的userInfo
表中时,为用户会话生成随机字符串。当用户稍后访问该站点时,您只需检查用户名和密码以进行身份验证,如果成功,则您将从该数据库中获取该用户先前存储的唯一随机字符串并将其放入会话。这样,您可以在整个生命周期内使用相同的随机字符串。希望这有帮助