我有一张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
});
}
ApplicationSession
是Session
对象的包装器。
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中删除此用户。并且将对用户进行身份验证(当然,如果他们没有单击“注销”)。解决这个问题的最佳方法是什么?
答案 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();