在登录表单上,我可以选择允许用户单击“记住我”复选框,该复选框会创建一个新的FormsAuthenticationTicket
,然后将其添加到cookie中。
if (_model.RememberMe)
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
_model.Username,
DateTime.Now,
DateTime.Now.AddDays(30),
true,
_model.Username,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
如上所述,有望在客户浏览器中使用30天。
测试一下,我故意将当前会话超时只剩下一分钟
<sessionState timeout="1"></sessionState>
所以过了一会儿,如果用户说“记得我”,我希望不要将网站重定向回登录页面。不过确实如此。这是执行它的代码。
// [".ASPXAUTH"] is the cookie name that is created by the FormsAuthenticationTicket`
if (User.Identity.Name == "" && Request.Cookies[".ASPXAUTH"] == null)
{
return RedirectToAction("LogOut", "Login");
}
// the current session hasn't timed out or the remember me cookie is enabled
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
但cookie是NULL。
我期待这是对我的误解,所以如果有人能帮我一把。我会很感激。
由于
答案 0 :(得分:0)
您正在寻找的是
string mySessionCookie = System.Web.HttpContext.Current.Request.Headers["Cookie"];
if (mySessionCookie.IndexOf(".ASPXAUTH", StringComparison.Ordinal) >= 0) {
// do something
}
修改强>
这个怎么样,我没有测试过,但我记得在
之前做过类似的事情HttpCookie cookie = (HttpCookie)(Request.Cookies[FormsAuthentication.FormsCookieName]);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);