我有一个网站,有时会话失去了价值。 这是我做的: 在Login ActionResult中,在Controller中:
private ActionResult Login(string user, string pass){
if (Membership.ValidateUser(user, pass))
{
Response.Cookies.Clear();
FormsAuthentication.SetAuthCookie(user, true);
System.Web.HttpContext.Current.Session["userName"] = user;
return Json(new {success = true});
}
}
这里,会话设置正常。 但是,在覆盖AuthorizeAttribute类:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var user = HttpContext.Current.User;
if (user == null) return false;
if (httpContext.Session?["userName"] == null) return false;
try
{
if (user.IsInRole("Admin")) return true;
}
catch (Exception ex)
{
return false;
}
}
此处会话为NULL。 我发现了一种模式:
然后,如果我退出(http://site/logout),那么,我可以再次登录。这是注销行动:
public ActionResult Logout()
{;
FormsAuthentication.SignOut();
System.Web.HttpContext.Current.User = null;
System.Web.HttpContext.Current.Session.Abandon();
System.Web.HttpContext.Current.Session.Clear();
}