首次登陆,正常,没有任何问题,登陆成功马上退出再登陆就会有问题了,即自动跳到登陆页面,查看GOOGLE浏览器调试器,发现没有COOKIE写入。如果退出隔几分钟再登陆就可以,会有相应COOKIE写入了!
服务端断点调试发现,虽然退出了,客户端浏览器的COOKIE也不见了,但是服务端的COOKIE依然存在,无法清除。这是问题症结。
如果隔了几分钟再登陆,COOKIE为null,就可以正常登陆,尝试各种办法,登录前尝试各种删除或者覆盖COOKIE,但是依然不行。
.config配置
<authentication mode="Forms">
<forms name="aspxuserlogin" protection="All" timeout="20" loginUrl="login.ashx" slidingExpiration="true" />
</authentication>
验证用户后的写入COOKIE:
var ticket = new FormsAuthenticationTicket(
version: 1,
name: userName,
issueDate: DateTime.Now,
expiration: DateTime.Now.AddMinutes(30),
isPersistent: false,
userData: _roles,
cookiePath: FormsAuthentication.FormsCookiePath);
var ticketCrypt = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticketCrypt);
cookie.HttpOnly = true;
if (FormsAuthentication.CookieDomain != null)
{
cookie.Domain = FormsAuthentication.CookieDomain;
}
cookie.Path = FormsAuthentication.FormsCookiePath;
cookie.Expires = DateTime.Now.AddMinutes(30);
context.Response.Cookies.Add(cookie);
退出代码:
FormsAuthentication.SignOut();
Session.Abandon();
为何会存在浏览器COOKIE不见了,服务端的COOKIE还存在,就是因为服务端的COOKIE无法及时清除,就无法写入有效的COOKIE,浏览器没有COOKIE写入,就没办法正常登入。这是为何呢?是哪里有缓存吗?