2014-03-04 14 views
1

我使用C#和MVC5使用此代码来创建自己的cookie:了rememberMe设置Cookie的到期时间,但在萤火虫出现过期的会话

// Prepare the ticket 
HttpContext.Response.Cookies.Clear(); 
FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(1, 
           "MYNAME", 
           DateTime.Now, 
           DateTime.Now.AddDays(10), // <<- Expires 10 days 
           true, 
           null); 

// Encrpt the ticket 
string encryptedCookie = FormsAuthentication.Encrypt(ticket); 

// Create new cookie 
HttpCookie cookie = new HttpCookie("MYNAME", encryptedCookie); 
cookie.Path = FormsAuthentication.FormsCookiePath; 

// Send the Cookie back to the browser 
HttpContext.Response.Cookies.Add(cookie); 

上的Web.config我设置的名称为

<authentication mode="Forms"> 
    <forms name="MYNAME" loginUrl="~/Account/Login"></forms> 
</authentication> 

但是,当我看萤火虫,则饼干显示为“MYNAME”,但“到期”设置为Session
事实上,当我关闭浏览器时,cookie会消失,当我回到网站时,我总是需要重新登录。所有其他浏览器也是如此。

我在做什么错?

回答

1

的问题是看看我在“票据”级别设置过期时间,但不在“Cookie”级别。

添加

cookie.Expires = ticket.Expiration; 

..solved的问题!

所以整个代码应该是这样的:

// Prepare the ticket 
HttpContext.Response.Cookies.Clear(); 
FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(1, 
           "MYNAME", 
           DateTime.Now, 
           DateTime.Now.AddDays(10), // <<- Expires 10 days 
           true, 
           null); 

// Encrpt the ticket 
string encryptedCookie = FormsAuthentication.Encrypt(ticket); 

// Create new cookie 
HttpCookie cookie = new HttpCookie("MYNAME", encryptedCookie); 
cookie.Path = FormsAuthentication.FormsCookiePath; 

// THE MISSING LINE IS THIS ONE 
cookie.Espires = ticket.Expiration; // <<- Uses current Ticket Expiration 

// Send the Cookie back to the browser 
HttpContext.Response.Cookies.Add(cookie); 
0

它是如何与其他浏览器? Chrome,IE? 如果它在那里正常工作,那么它也应该在FF上工作。 如果它不工作,则有可能是有问题的代码

就这些文章 FormsAuthenticationTicket expires too soon

基本一个 http://www.codeproject.com/Articles/244904/Cookies-in-ASP-NET http://msdn.microsoft.com/en-us/library/ms178194.ASPX

感谢

+0

他们都有..所有以某种方式让他们的过期设置为“会议”在浏览器级别相同的问题。问题不在于我的池回收,而是因为关闭浏览器时cookie过期。如果我不关闭它,它会保持活动状态,并在我返回网站时自动登录。 – Johnny

+0

好吧在配置中添加超时,并尝试。 把它像超时= 1200,并试一试 –

+0

不,仍然没有工作。对此我有一个小希望:-) – Johnny