Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FormsAuthentication票证到期_C#_Asp.net_Cookies_Forms Authentication - Fatal编程技术网

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