如果我从DB中删除用户,用户将保持身份验证(大会话超时)

时间:2012-12-25 03:42:14

标签: c# asp.net-mvc

我有一张User表。我正在使用Forms身份验证,并具有以下代码用于登录:

 public JsonResult LogOn(FormCollection form)
 {
        var agent = SiteUserRepository.CheckAgent(form["Email"], form["Password"]);
        if (agent == null)
            return Json(new
            {
                IsSuccess = false,
                Message = "Wrong email or password"
            });
        SiteUserRepository.UpdateLastLogon(agent.Email);

        FormsAuthentication.SetAuthCookie(agent.Email, true);
        ApplicationSession.CurrentUser = agent;

        return Json(new
            {
                IsSuccess = true
            });

 }

ApplicationSessionSession对象的包装器。

public static class ApplicationSession
{
    private const string _currentUser = "CurrentUser";
    public static SiteUser CurrentUser
    {
        get
        {
            var user = HttpContext.Current.Session[_currentUser];
            if (user != null)
                return (SiteUser)user;
            return null;
        }
        set
        {
            HttpContext.Current.Session[_currentUser] = value;
        }
    }

}

会话超时等于1440(24小时)。我需要这个价值。 例如,用户在站点登录。然后我从DB中删除此用户。并且将对用户进行身份验证(当然,如果他们没有单击“注销”)。解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您想要使用Cookie。您的代码需要检查cookie,如果它不存在,或者时间已过期,则创建一个新的。

我认为这会给你一个很好的例子:

C# Cookies based on login information

http://www.beansoftware.com/ASP.NET-Tutorials/Cookies-ASP.NET.aspx

记住我的复选框类型实现,一天到期可以这样做:

if (chBox.Checked)

      {
          HttpCookie myCookie = new HttpCookie("Cookie_Remember"); //new cookie object

          Response.Cookies.Remove("Cookie_Remember"); //This will remove previous cookie
          Response.Cookies.Add(Cookie_Remember); //This will create new cookie

          Cookie_Remember.Values.Add("UserInfo", txt_username.Text); //Add User Name 

        // You can add multiple values

          DateTime CookieExpir= DateTime.Now.AddDays(5); //Cookie life

          Response.Cookies["Cookie_Remember"].Expires = CookieExpir; //Maximum day of cookie's life       
      }

答案 1 :(得分:0)

解决方案是仅允许通过您的应用程序从您的存储库/数据库中删除用户。

删除用户后,强制将其注销:

//Delete the user
SiteUserRepository.DeleteUser(agent);

//Log them out
FormsAuthentication.Signout();