gpt4 book ai didi

.net - 如何在 asp.net formsAuthentication 中使用户超时

转载 作者:行者123 更新时间:2023-12-01 12:00:52 26 4
gpt4 key购买 nike

我想知道如果用户在 10 分钟后没有执行任何请求, session 被终止并且他们已注销,我该如何为用户设置超时。

我的webconfig中有这个

<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
protection="All"
timeout="20160"
path="/"
requireSSL="false"
slidingExpiration="false"
defaultUrl="default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>

我被告知将超时设置为等于“20160”,因为如果他们选中“保持登录 2 周”,我想登录 2 周。我还确保在我的 cookie Cookie 中启用 IsPersistent。

那么我需要设置另一个超时吗?因为在我的网站上一段时间不活动后,它不再工作了。我没有计时,但说如果我离开并在 10 分钟后回来并尝试在我的网站上做一些事情,比如保存一些东西,它不会起作用。所以看起来我的连接被终止了或什么的。我必须注销,重新登录,然后才能正常工作

编辑

这就是我做 cookies 的方式

 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(version,userName,DateTime.UtcNow,DateTime.UtcNow.AddDays(14),createPersistentCookie,userData,"/");
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.Path = "/";
if (createPersistentCookie == true)
{
authCookie.Expires = DateTime.UtcNow.AddDays(14);
}
HttpContext.Current.Response.Cookies.Add(authCookie);

当我在我的 webconfig 中设置 session 状态时,我的 url 中有这个

(S(gkvkze55zfzzee45wj34byee))

我宁愿在我的代码中没有这一行。

最佳答案

另一个答案,只是为了展示您可能希望如何使用 web.config 中的值创建 cookie,而不是在代码中对它们进行硬编码。

首先,考虑您是否需要所有额外选项。最简单的是在你的 web.config 中设置所有内容

FormsAuthentication.RedirectFromLoginPage("Bob", isPersistent)

但是,如果您需要将 UserData 添加到工单,则必须创建自己的。请注意我们如何使用 web.config 中的值而不是硬编码值。

/// <summary>
/// Create a New Forms Authentication Ticket when User Impersonation is active, using the current ticket as a basis for the new ticket.
/// </summary>
private static void NewTicket(MyUser currentUser,
string userData,
bool createPersistentCookie)
{
System.Web.Configuration.AuthenticationSection authSection =
(System.Web.Configuration.AuthenticationSection)
ConfigurationManager.GetSection("system.web/authentication");

System.Web.Configuration.FormsAuthenticationConfiguration
formsAuthenticationSection = authSection.Forms;

DateTime now = DateTime.Now;

// see http://msdn.microsoft.com/en-us/library/kybcs83h.aspx
// Create a new ticket used for authentication
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
2, // Ticket version
currentUser.UserName, // Username to be associated with this ticket
now, // Date/time issued
now.Add(formsAuthenticationSection.Timeout),// Date/time to expire
createPersistentCookie,
userData,
FormsAuthentication.FormsCookiePath);

// Hash the cookie for transport over the wire
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, // Name of auth cookie (specified in web.config)
hash); // Hashed ticket

// Add the cookie to the list for outbound response
HttpContext.Current.Response.Cookies.Add(cookie);
}

您可以在用户已登录时使用相同的技术重新创建票证。例如,如果您需要更改 Ticket.UserData。签发新票证时,您会增加版本号。

关于.net - 如何在 asp.net formsAuthentication 中使用户超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695155/

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