2013-09-23 55 views
1

我为我的网站使用自定义会员供应商。并使用此代码登录:如何在自定义会员供应商中保存ASP.NET_SessionId

private User SetupFormsAuthTicket(string userName, bool persistanceFlag) 
    { 
     User user; 
     UsersContext usersContext = new UsersContext(); 
      user = usersContext.GetUser(userName); 

     var userId = user.UserId; 
     var userData = userId.ToString(CultureInfo.InvariantCulture); 
     var authTicket = new FormsAuthenticationTicket(1, //version 
          userName, // user name 
          DateTime.Now,    //creation 
          DateTime.Now.AddMinutes(30), //Expiration 
          persistanceFlag, //Persistent 
          userData); 

     var encTicket = FormsAuthentication.Encrypt(authTicket); 
     Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 
     return user; 
    } 

但我检查的cookie在浏览器中,只需保存ASPXAUTH,而不是保存ASP.NET_SessionId

我想保存ASP.NET_SessionId但persistanceFlag是真实的。

回答

0

如果要保留认证凭证,则需要明确地将Cookie Expires设置为与认证凭证到期时间相同。

.... 

var encTicket = FormsAuthentication.Encrypt(authTicket); 
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); 

if (authTicket.IsPersistent) 
{ 
    cookie.Expires = authTicket.Expiration; 
} 

Response.Cookies.Add(cookie);