【发布时间】:2015-11-25 15:51:40
【问题描述】:
我正在使用表单身份验证来验证和授权我网站中的请求。
这是登录的代码:
var objLogin = new LoginModel { Email = model.Email, Password = CommonMethod.Encryptdata(model.Password) };
var UserDetail = Users.LoginUser(objLogin);
if (UserDetail.ErrorMessage == "SuccessLogin")
{
var UserData = UserDetail.UserId + "," + UserDetail.UserRole + "," + UserDetail.Email + "," + UserDetail.FirstName + "," + UserDetail.LastName;
DateTime expirydate = DateTime.Now.AddDays(10);
var Ticket = new FormsAuthenticationTicket(1, UserDetail.Email, DateTime.Now, expirydate, true, UserData, FormsAuthentication.FormsCookieName);
string hashCookies = FormsAuthentication.Encrypt(Ticket);
var Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
Response.Cookies.Add(Cookie);
ViewBag.InActiveStatus = "";
//Code for expiration
if (Ticket.IsPersistent)
{
Cookie.Expires = Ticket.Expiration;
}
if (!string.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
}
我正在使用持久性 cookie。
用于退出网站的方法包含以下代码:
FormsAuthentication.SignOut();
Session.Abandon();
Session.Clear();
Session.RemoveAll();
string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
Response.Cookies[cookie].Expires = DateTime.Now.AddYears(-1);
}
return RedirectToAction("Login", "Account");
我面临的问题是退出后我可以上网家庭控制器 页。我已经在所有家庭控制器方法上实现了 Authorize(Roles="user")。
[Authorize(Roles = "user")]
public ActionResult Index()
但我无法从其他控制器(家庭除外)浏览页面。例如 在 Challenge Controller 中使用以下方法:
[Authorize(Roles = "user")]
public ActionResult MyChallenges()
当我强行清理浏览器cookies时问题得到解决。但是从用户体验的角度来看,不建议普通用户这样做。
请说明为什么会这样?提前致谢!
【问题讨论】:
标签: asp.net-mvc authentication cookies authorization forms-authentication