C# ASP.NET Forms身份认证
原文:https://www.cnblogs.com/kyo-lynn/p/3418577.html
原文:https://www.cnblogs.com/fish-li/archive/2012/04/15/2450571.html
?
注意1:
1、需要在web.config中添加節點,
2、需要引用命名空間:System.Web.Security
?
?注意2:
?注意 票據時間 和 cookie時間
?比如:
cookie時間為5秒,票據時間為5秒,用戶在5秒內刷新,登錄時間會一直延續下去,如果超過5秒,登錄狀態消失
cookie時間為5秒,票據時間為5000秒,只要登錄時間超過5秒,不管用戶是否刷新頁面,登錄狀態消失
?
?
1、需要在Web.config中添加節點,添加在system.web下。
<authentication mode="Forms"></authentication>?
//獲取認證信息public ActionResult Index(){if (Request.IsAuthenticated){//獲取認證信息//Request.Cookies[FormsAuthentication.FormsCookieName] != null//Request.IsAuthenticatedstring user = User.Identity.Name;//Request.RequestContext.HttpContext.User.Identity.Namevar cookie = Request.Cookies[FormsAuthentication.FormsCookieName];var ticket = FormsAuthentication.Decrypt(cookie.Value);string data = ticket.UserData;return Content($"用戶已登錄 <br> user:{user} <br> data:{data}");}return Content("用戶未登錄");}?
//登錄1public ActionResult Login1(){FormsAuthentication.SetAuthCookie("name2", true);return Content("登錄成功,name: name2");}//登錄2public ActionResult Login2(){/*判斷是否登錄的唯一標志,就是 看看 有沒有名稱為FormsAuthentication.FormsCookieName的cookie,有就是登錄了。按照asp.net forms驗證的設計思想,如果要將自定義數據放到Cookie里面,首先應該定制一個FormsAuthenticationTicket,將自定義數據放到其UserData里,然后用FormsAuthentication.Encrypt加密這個Ticket,最后用new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)生成一個Cookie,加入到Response.Cookies中, 作為登錄標注。并不是直接修改 HttpCookie的Value或者Values。 *///創建認證信息 TicketFormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "name1", DateTime.Now, DateTime.Now.AddSeconds(5), false, "value1");//票據加密string encryptedTicket = FormsAuthentication.Encrypt(ticket);//寫入到cookievar cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);System.Web.HttpContext.Current.Response.SetCookie(cookie);return Content($"cookie <br> name:{cookie.Name} <br> value:{cookie.Value}");}?
//退出public ActionResult Logout(){FormsAuthentication.SignOut();return Content("退出成功");}?
?
?
?
測試1:用戶在5秒內刷新頁面,登錄狀態會一直持續下去
?
?測試2:不管用戶怎么刷新,超過5秒后,就會退出登錄狀態
?
測試3:用戶在5秒內刷新頁面,登錄狀態會一直持續下去。超過3秒刷新,用戶登錄狀態消失
?
測試1 和 測試3 的區別:
測試1:票據時間 和 cookie時間 都為5秒
測試3:票據時間為3秒,cookie時間為5秒
結論:測試3,就算用戶在4秒的時候刷新頁面,但那個時間用戶從游覽器提交的票據,在后臺判斷是已經失效的,因為票據的過期時間為3秒。
?
測試1 和 測試2 的區別:
測試1:票據時間 和 cookie時間 都為5秒
測試2:票據時間為5000秒,cookie時間為5秒
結論:測試2,用戶在5秒內刷新頁面,游覽器有帶cookie往服務端請求。
如果時間超過5秒,游覽器請求的時候,就不帶cookie。
這個時候,雖然票據沒有過期,但是與票據關聯的cookie(應該是票據本身)根本就沒有被提交到服務端,
所以還是為未登陸狀態。
?
過期時間分為兩塊:
1、cookie的過期時間
cookie的過期時間 決定了 游覽器是否會把票據(票據本身就是存在cookie里面的)提交到后臺
2、票據的過期時間
后臺判斷過期時間的依據,這個才是實實在在的過期時間。
如果票據過期了,就算偽造cookie上傳票據,也沒法通過后臺的驗證。
?
記錄一下一些自己的理解
?
轉載于:https://www.cnblogs.com/guxingy/p/10643785.html
總結
以上是生活随笔為你收集整理的C# ASP.NET Forms身份认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL-2 查找入职员工时间排名倒数第三
- 下一篇: 安卓5.0以上设备最简单激活XPOSED