var query = from p in AdminModelContext.Users
where p.UserName == model.UserName && p.Password == encryptPassword
&& p.IsDeleted == false
select p;
IList<Users> userList = query.ToList();
if (userList.Count() > 0)
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (CheckUrl(returnUrl))
{
return Redirect(returnUrl);
}
SetRoleForUser(userList[0].RolesId);
LoggerService.Info(string.Format("Login Successful for the user : {0}",
model.UserName));
return RedirectToAction("Index", "Home");
}
我使用下面的代码通过我的网站登录。我面临的问题是当我在特定的浏览器上登录用户,并同时在不同的浏览器上用不同的用户登录,然后删除用户(在其他浏览器上登录)。我仍然可以浏览已删除的用户登录的页面。已删除用户登录后,即使删除另一个大衣
我没有找到一个公平的解决方案,将认证逻辑放在每一页上。我的网站采用MVC模式,并使用基于表单的身份验证。
请建议我怎么能把登录的用户会话验证,并实现这一点。
上面的代码是正确的,你的问题是与身份验证票证,它仍然是在用户计算机上的有效,所以这段代码没有得到执行。我会建议,检查Global.asax,Session_Start事件上的用户删除状态。 – hazimdikenli 2011-05-05 14:04:49
如果使用被删除,那么你只需要FormsAuthentication.SignOut(或类似的东西,然后Session.Abandon) – hazimdikenli 2011-05-05 14:05:57
好吧,看来你的问题并不那么简单,我为它添加了一个答案。 – hazimdikenli 2011-05-05 14:36:37