Forms Authentication.Set AuthCookie

12310 ワード

公式:http://technet.microsoft.com/zh-cn/magazine/twk5762b(VVS.80).aspx
参考転載:http://www.360doc.com/content/13/0614/13/9316347_292797003.shtml
 この二日間はFormsを研究してユーザー検証をしていますが、それ自体はmsdnで調べてみたら、どのようなやり方が分かりますか?でも、私はテストの時にも生まれます。 
いくつかの疑問 
  1.何か私はweb.co figのauthenticationノードのFormsにDommainを設置しました。Forms Authentication.Set AuthCookie(logine Name,false); 
  その後、HttpContect.Current.User.Identity.Nameの時はいつも私に戻ってきます。これは私を憂鬱にさせます。 
  2.configではだめです。コードの中でユーザークッキーのDomainを指定しますが、問題がまた発生しました。 
  a)まだIdentity.Nameの値が取れません。 
  b)ユーザが正常に終了しました。 
  私達がCookieのDomainに対して処理しない言葉なら、私の上で言った問題がありません。 
  一般的なやり方: 
  1,web.co nfigノードを設定する
  <!--
   <authentication>       ASP.NET    
        ,
        。
-->
<authentication mode="Forms">
<forms name=".Bk5173"
protection="All"
timeout="30"
path="/"
requireSSL="false"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false">
</forms>
</authentication>
  2.ユーザー名とパスワードが合法的であることを確認した後:
//      cookie   
            FormsAuthentication.SetAuthCookie(loginName, false);
  3.前回はユーザーの名前をクッキーと書いて、その後はユーザーの名前を取得することができます。 
  string idenName=HttpConttext.Current.User.Identity.Name; 
  4.私たちはidenNameによってユーザーを判断することができます。もしidenName=""ならばログインページにジャンプしてユーザーを登録させます。そうでないとユーザーの名前をUIに表示します。 
  5.退出する時は、次の方法で結構です。 
  Forms Authentication.SignOut() 
  ここに来て、注意があるかどうかは分かりませんが、Cookie Domainを設定していません。これも私がやるべきことです。以上の方法を修正します。 
  1)変更方法:
//      cookie   
            FormsAuthentication.SetAuthCookie(loginName, false);
  以下の方法です
//      cookie   
            FormsAuthentication.SetAuthCookie(loginName, false);
//      cookie 
            HttpCookie cookie = FormsAuthentication.GetAuthCookie(loginName, false);
//     cookie      cookie          
//      cookie
            FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(1,
oldTicket.Name,
oldTicket.IssueDate,
DateTime.Now.AddMinutes(30),
oldTicket.IsPersistent,
oldTicket.UserData,
FormsAuthentication.FormsCookiePath);
cookie.Domain = cookieDomain;
cookie.Value = FormsAuthentication.Encrypt(newTicket);
//   cookie
HttpContext.Current.Response.SetCookie(cookie);
  2)ユーザが退出した時の方法を変更する。
HttpCookie cookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName];
cookie.Domain = cookieDomain;
cookie.Value = null;
cookie.Expires = DateTime.Now.AddDays(-1);
//  cookie
HttpContext.Current.Response.Cookies.SetCookie(cookie);
FormsAuthentication.SignOut();
  以上のようにすれば、Identity.Nameは取得できません。分析と関連資料を調べて、上記の方法を修正します。 
1)
//      cookie   
            FormsAuthentication.SetAuthCookie(loginName, false);
//      cookie 
            HttpCookie cookie = FormsAuthentication.GetAuthCookie(loginName, false);
//     cookie      cookie          
//             cookie
            FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(1,
oldTicket.Name,
oldTicket.IssueDate,
DateTime.Now.AddMinutes(30),
oldTicket.IsPersistent,
oldTicket.UserData,
FormsAuthentication.FormsCookiePath);
cookie.Domain = cookieDomain;
cookie.Value = FormsAuthentication.Encrypt(newTicket);
HttpContext.Current.Response.Cookies.Add(cookie);
2).
HttpCookie cookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName];
cookie.Domain = cookieDomain;
cookie.Value = null;
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);
FormsAuthentication.SignOut();
  これでユーザーはログインとログアウトを成功させることができます。 
  可能な理由は、cookieにサーバーとクライアントがあると思います。ですから、新しい検証チケットを作成して、以前の名前が無効になります。