我正在使用会员API作为我的登录系统,一个奇怪的事情一直困扰着我。我允许用户选择是否“记住我”,这意味着是否创建一个有效期为一个月的持久性cookie。
在Web.config中,我写道:
<authentication mode="Forms">
<forms timeout="60" />
</authentication>
这应该是60分钟的默认会话cookie。
在登录页面后面的代码中:
if(Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text))
{
authCookie = FormsAuthentication.GetAuthCookie(UsernameTextBox.Text, RememberMeCheckBox.Checked);
if(RememberMeCheckBox.Checked)
authCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(authCookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(UsernameTextBox.Text, RememberMeCheckBox.Checked));
}
结果却很奇怪。我好像已经创建了一个60分钟的持久cookie!这怎么可能?
答案 0 :(得分:2)
您将Cookie到期时间设置为1个月,但其中包含的身份验证票证尚未修改。它已从您的Web配置继承了默认值60分钟。
您可能希望将Cookie过期与身份验证票证过期同步,或者将Cookie设置为具有很长的过期日期。
您需要做的是
手动创建FormsAuthenticationTicket实例并设置 实例的到期属性。
手动将Cookie添加到包含故障单的Response.Cookies集合中。 (而不是使用get / setAuthCookie()) web.config设置)。
一些示例代码位于FormsAuthentication.Encrypt()的文档中。