C# FormsAuthentication票证到期
我一直在网上搜索,找到了很多奇怪的答案,我几乎都试过了。 我的问题是这个。我的登录页面包含:C# FormsAuthentication票证到期,c#,asp.net,cookies,forms-authentication,C#,Asp.net,Cookies,Forms Authentication,我一直在网上搜索,找到了很多奇怪的答案,我几乎都试过了。 我的问题是这个。我的登录页面包含: FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString()); string encTicket = FormsAuthentication.Encrypt
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(userName, persistCookie);
现在,最小值是基于每个用户的,可以单独设置,persistCookie也是如此
据我所知,这段代码可能会覆盖web.config中的默认值。应该是30分钟
<authentication mode="Forms">
<forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>
现在它开始工作了。但我似乎不明白为什么这会起作用,而上一次却不行。
票证创建是相同的,唯一的区别是我在创建HttpCookie时添加HttpCookie的Expires属性,而不是在创建对象之后
如果有人有好的解释,我洗耳恭听!:) 我认为您不理解cookie过期和票证过期日期之间的区别-票证可以被视为已过期,即使它所存储的cookie仍然有效。FormsAuthenticationTicket构造函数的第4个参数负责记录单过期日期
因此,要回答您的问题,您需要手动设置cookie的过期日期或使其足够长以超过身份验证票证的过期日期。您的代码的问题是您正在调用
RedirectFromLoginPage
,这将创建表单身份验证cookie,覆盖刚创建的cookie:
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(userName, persistCookie); <-- creates a new cookie
HttpCookie cookie=新的HttpCookie(FormsAuthentication.formscookeName,encTicket);
cookie.Expires=票证.expirement;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(用户名,持久cookie);我想我是用“cookie.Expires=ticket.expirement;”这样做的?这将把cookie的过期时间设置为与票据相同的时间。。。。应该都是120分钟。。对正如我所说。。当我第一次得到它时很简单:)谢谢:)
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage(userName, persistCookie); <-- creates a new cookie