2009-11-30 103 views
7

我在使用FormsAuthenticationTicket创建非持久性cookie时遇到问题。我想要在ticket中存储userdata,所以我不能使用FormsAuthentication.SetAuthCookie()或FormsAuthentication.GetAuthCookie()方法。正因为如此,我需要创建FormsAuthenticationTicket并将其存储在HttpCookie中。使用FormsAuthenticationTicket创建非持久性cookie

我的代码如下所示:

DateTime expiration = DateTime.Now.AddDays(7); 

// Create ticket 
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, 
    user.Email, 
    DateTime.Now, 
    expiration, 
    isPersistent, 
    userData, 
    FormsAuthentication.FormsCookiePath); 

// Create cookie 
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); 
cookie.Path = FormsAuthentication.FormsCookiePath; 
if (isPersistent) 
    cookie.Expires = expiration; 

// Add cookie to response 
HttpContext.Current.Response.Cookies.Add(cookie); 

当变量isPersistent是真实的一切工作正常,该cookie将被保留。但是,当isPersistent为false时,Cookie似乎仍然存在。我在浏览器窗口中登录,关闭它并再次打开浏览器,我仍然登录。如何将cookie设置为非持久性?

非永久性Cookie与会话Cookie相同吗? cookie信息是否存储在服务器上的sessiondata中,或者cookie是在每次向服务器请求/响应时传输的?

回答

3

尝试删除:

if (!isPersistent) { cookie.Expires = DateTime.Now.AddYears(-1); }

if (isPersistent) { cookie.Expires = expiration; }

...,并替换它