gpt4 book ai didi

c# - ASP.NET 表单例份验证中的记住我功能不起作用

转载 作者:太空狗 更新时间:2023-10-29 17:51:15 25 4
gpt4 key购买 nike

我正在使用 ASP.NET 表单例份验证将用户登录到我们正在开发的网站。

部分功能是“记住我”复选框,如果用户选中它,它会记住用户一个月。

登录用户的代码如下:

public static void Login(HttpResponse response, string username,
bool rememberMeChecked)
{
FormsAuthentication.Initialize();
FormsAuthenticationTicket tkt = new FormsAuthenticationTicket(1, username, DateTime.Now,
DateTime.Now.AddMinutes(30), rememberMeChecked,
FormsAuthentication.FormsCookiePath);
HttpCookie ck = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(tkt));
ck.Path = FormsAuthentication.FormsCookiePath;

if (rememberMe)
ck.Expires = DateTime.Now.AddMonths(1);

response.Cookies.Add(ck);
}

web.config 中的相关部分是这样的:

<authentication mode="Forms">
<forms loginUrl="Home.aspx" defaultUrl="~/" slidingExpiration="true" timeout="43200" />
</authentication>

虽然它的持久性属性 (rememberMeChecked) 设置为 true,但如果用户不使用该网站,这会很好地记录用户,但会在半小时后将其注销,如果它是 true,cookie 将设置为在月。我在这里遗漏了什么吗?

提前致谢,F

最佳答案

看起来您的身份验证票证仍配置为在半小时后过期,即使 cookie 本身在 30 天后过期。您可能还必须延长票证的生命周期:

public static void Login(HttpResponse response, string username,
bool rememberMeChecked)
{
DateTime expiration = DateTime.Now.AddMinutes(30);
if (rememberMe) {
expiration = DateTime.Now.AddMonths(1);
}

FormsAuthentication.Initialize();
FormsAuthenticationTicket tkt = new FormsAuthenticationTicket(1, username,
DateTime.Now, expiration, rememberMeChecked,
FormsAuthentication.FormsCookiePath);

HttpCookie ck = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(tkt));
ck.Path = FormsAuthentication.FormsCookiePath;
response.Cookies.Add(ck);
}

关于c# - ASP.NET 表单例份验证中的记住我功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com