我想知道如果用户在10分钟之后没有做任何请求,如果会话被终止并且他们被注销,我该如何为用户设置超时。
我的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分钟后回来并尝试在我的网站上做一些事情,比如保存它将无效。所以看起来我的连接被杀了或什么的。我必须注销,重新登录然后才能运行
修改
这就是我制作饼干的方式
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中设置会话状态时,我的网址就有了这个
(S(gkvkze55zfzzee45wj34byee))
我宁愿在我的代码中没有这个讨厌的行。
答案 0 :(得分:3)
另一个答案,只是为了说明如何使用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
。发行新票证时,您将增加版本号。
答案 1 :(得分:2)
我认为您的超时是由会话超时而非身份验证超时
引起的检查 web.config中的会话状态节点。
<sessionState mode="InProc"
cookieless="true"
timeout="60"/>
答案 2 :(得分:0)
您不能同时拥有表单身份验证票证的滑动和绝对过期时间。
请参阅我对this SO question的回答,以获取概述以及指向理解ASP.NET中的表单身份验证的教程的链接。
更新
如何为用户设置超时 说完后他们不做任何要求 会议被杀了10分钟 他们已经退出
已注销=表单身份验证并与会话(状态)正交(例如,存储数据的位置)。
简单的答案是不在会话中存储数据。请参阅this SO question,它与您想要的类似。