2010-12-16 17 views
1

私のアプリケーションでは、フォーム認証を使用しています。私のAuthenticatonコードは以下の通りです:複数のページで共有フォーム認証Cookieに関する問題

public static void Authenticate(bool redirectToPage, ISecurityUser user, params string[] roles) 
    { 
     FormsAuthentication.Initialize(); 
     GenericIdentity id = new GenericIdentity(user.UserName); 
     ExtendedPrincipal principal = new ExtendedPrincipal(id, user, roles); 
     //ExtendedPrincipal principal = new ExtendedPrincipal(id, user, new string[] { "1" }); 

     string compressedPrincipal = ConvertPrincipalToCompressedString(principal); 

     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, user.UserName, DateTime.Now, DateTime.Now.AddMinutes(30), true, compressedPrincipal, FormsAuthentication.FormsCookiePath); 

     string hash = FormsAuthentication.Encrypt(ticket); 
     HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 

     //cookie.HttpOnly = false; 
     //cookie.Expires = DateTime.Now.AddMinutes(30); 

     HttpContext.Current.Response.Cookies.Add(cookie); 

     if (redirectToPage) 
     { 
      HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(user.UserName, true)); 
     } 
    } 

ユーザオブジェクトには、FirmIDとDealerIDプロパティが含まれています。私はアプリケーションにログインした後、私はファームIDとDealerIDをアプリケーションから置き換えることができます。プロセスを変更した後、このコードはrunnedされています。私は2番目のページからアプリを開くと、2ページ目のクッキーは最初のページのを押しつぶす:

public static void RefreshIdentitiy(ISecurityUser user) 
    { 
     HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 
     HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName); 

     ExtendedPrincipal principal = ConvertCompressedStringToPrincipal(ticket.UserData); 
     principal.BindProperties(user); 

     FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(
     ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, 
     ticket.IsPersistent, ConvertPrincipalToCompressedString(principal), ticket.CookiePath); 

     cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newticket)); 

     HttpContext.Current.Response.Cookies.Add(cookie);    
    } 

私の問題は、ということです。したがって、最初のページのFirmIDとDealerIDも変更されます。

2番目のページからアプリを開くと、Cookieが別のページを破棄したくないこの問題について私は何ができますか?

答えて

0

すべてのあなたのページにこのような何かを行う必要があります。

if(Request.Cookies[FormsAuthentication.FormsCookieName]!=null) 
{ 
     HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 

     cookie.HttpOnly = false; 
     cookie.Expires = DateTime.Now.AddMinutes(30); 

     HttpContext.Current.Response.Cookies.Add(cookie); 
} 

編集 私の目的は、あなたのクッキーあなたが新しいページに移動するたびに上書きされていないことを確認することです

+0

何あなたが書いたコードの目的は?あなたは説明することができますか、私は何が恥ずかしいですか? – mavera

関連する問題