FormsAuthenticationTicket 此功能主要在記錄使用者是否已經登入,實際上
會產生一組 Cookie,內含一組經過加密的編碼,.net 可以透過檢核這組編碼,
來判斷使用者是否已經登入(或者說已獲得允許使用的權限)。
使用者在開啟頁面,程式進入 Action 前,先檢查使用者登入的驗證,也就是指
是否已取得 ticket,若未通過驗證,則跳轉到登錄頁,若已驗證,則允許進入
Action 內。
當使用者已經在登錄頁登錄,且檢核通過,則產生一張 ticket (也就是一組 Cookie),
當使用者切換頁面時,瀏覽器便會再把這組 ticket(Cookie),帶到後端,後端只
要檢核這組 ticket,就可以得知使用者是否仍處於已驗證的狀態。
1.在要進行驗證的 Action 前掛上 [Authorize()]
- [Authorize()]
- public ActionResult Home2()
- {
- return View();
- }
2.在 WebConfig 中加上,當驗證失敗時要導向的頁面位置(要加在專案下的那個 WebConfig)
- <system.web>
- <authentication mode="Forms">
- <forms loginUrl="Login/Index" cookieless="UseCookies" timeout="2880" />
- </authentication>
- </system.web>
3.當使用者登入後,寫入一張 ticket,讓之後進入 action 前能通過 [Authorize()] 驗證
- public ActionResult Login(string uid)
- {
- //驗證使用者輸入的帳號密碼
- if (uid.ToUpper() == "UID")
- {
- //驗證通過,建立一張 ticket
- FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
- 1, //票證的版本琥碼
- uid, //與票證相關的使用者名稱
- DateTime.Now, //核發此票證時的本機日期和時間
- DateTime.Now.AddMinutes(60), //票證到期的本機日期和時間
- false, //如果票證將存放於持續性Cookie中,則為true
- "", //要與票證一同存放的使用者特定資料
- FormsAuthentication.FormsCookiePath); //票證存放於Cookie中時的路徑
- //ticket 生成 cookie
- string encTicket = FormsAuthentication.Encrypt(ticket);
- HttpCookie httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
- httpCookie.HttpOnly = true;
- //cookie 寫入 response
- Response.Cookies.Add(httpCookie);
- //轉向到首頁
- return View("Home");
- }
- else
- {
- //驗證不通過,返回到登錄頁
- return View("Index");
- }
- }
沒有留言:
張貼留言