我正在尝试使用以下代码创建表单身份验证cookie。虽然这适用于持久登录,但是当我关闭浏览器会话时,非持久性cookie不会过期并从浏览器中删除。它仍然存在于浏览器中。
public static void SetAuthenticationCookie(string userName, Role role,
bool isPersistent)
{
string data = role.RoleName;
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName,isPersistent);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(
ticket.Version, ticket.Name, ticket.IssueDate,ticket.Expiration,
ticket.IsPersistent,data);
authCookie.Value = FormsAuthentication.Encrypt(newticket);
HttpContext.Current.Response.Cookies.Add(authCookie);
}
以下是表单身份验证的web.config条目
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" cookieless="UseCookies" name=".OneClick"
protection="All" slidingExpiration="true" timeout="43200" />
</authentication>
以下是来自浏览器
的Cookie信息的屏幕截图
这里有什么我想念的吗?请让我知道
答案 0 :(得分:0)
我不确定这是否是正确的解决方案。但我发现,即使将cookie到期时间设置为上一个日期时间,也会从web.config设置表单身份验证票证到期,使其行为类似于持久性cookie。所以我尝试设置1分钟作为cookie和票证到期,这使得cookie和票证在超时1分钟后到期。
即使非持久性cookie在浏览器会话结束后也会过期。出于某种原因,保留此cookie,直到表单身份验证cookie过期。
这是解决方案。
public static void SetAuthenticationCookie(string userName, Role role,
bool isPersistent)
{
string data = role.RoleName;
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName,
isPersistent);
if (!isPersistent)
{
authCookie.Expires = DateTime.Now.AddMinutes(30);
}
FormsAuthenticationTicket ticket=FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newticket=
new FormsAuthenticationTicket(ticket.Version,ticket.Name, ticket.IssueDate,
authCookie.Expires, ticket.IsPersistent, data);
authCookie.Value = FormsAuthentication.Encrypt(newticket);
HttpContext.Current.Response.Cookies.Add(authCookie);
}
欢迎提出建议或改进。
由于