前言
前段時間使用 ASP.NET MVC + Form Auth 做了一個單機小專案,當時對於採用什麼方式來儲存登入狀態有些糾結,通常的做法是使用 Cookie 或者 Session,但是我想有沒有更好的方式來儲存登入狀態呢?於是花了點時間調研了 ASP.NET 的全域性變數使用方式,希望能找到更好的方式來儲存登入狀態。
以下是本次調研過程及總結。
調研過程及總結
Application
測試過程:
- LoginController 在 Chrome 瀏覽器寫入 Application["Test"] 的值
- 在 Edge 瀏覽器開啟,Application["Test"] 的值依然存在
結論
Application 是全域性性的,不太適合儲存登入狀態
Session
測試過程:
- LoginController 在 Chrome 瀏覽器寫入 Session["Test"] 的值
- 重新重新整理 Chrome 瀏覽器頁面,值存在
- 在 Edge 瀏覽器開啟,Session["Test"] 的值不存在
結論
Session 適合儲存登入狀態,其值儲存在伺服器端,重啟 IIS 或者到時間(預設是20分鐘)等方式都會使其丟失
Cookie
測試過程:
- LoginController 在 Chrome 瀏覽器寫入 HttpCookie ["Test"] 的值
- 重新重新整理 Chrome 瀏覽器,值存在
- 在 Edge 瀏覽器 開啟,cookie 不存在
結論
Cookie 適合儲存登入狀態,其值儲存在客戶端,不能儲存太多資訊,安全性沒有 Session 好
靜態變數
測試過程:
- LoginController 在 Chrome 瀏覽器寫入靜態變數 GlobalTest.MyLogin 的值
- 在 Edge 瀏覽器開啟,GlobalTest.MyLogin 的值依然存在
結論
靜態變數是全域性性的,不太適合儲存登入狀態
總結
權衡之下,最終還是選擇使用 Session,在單機模式下,Session 相對比較安全可靠。當然還可以把登入狀態持久化到本地檔案或者資料庫中,不過這又是另外一回事了,維護起來也相對比較麻煩。
我是老楊,一個執著於程式設計樂趣、至今奮鬥在一線的 10年+ 資深研發老鳥,是軟體專案管理師,也是快樂的程式猿,持續免費分享全棧實用程式設計技巧、專案管理經驗和職場成長心得!歡迎關注老楊的公眾號(名稱:程式碼掌控者),更多幹貨等你來
往期精彩
- C# 靜態類,高手不想讓你知道的 15 個真相
- 封裝一個 C# 範圍判斷函式,從此告別重複編寫範圍判斷程式碼的煩惱
- 用 C# Stopwatch 計時,讓程式碼效能飛起來!
- 輕裝上陣,Visual Studio LocalDB:.NET 程式設計師的本地資料庫神器
- 封裝一個C#萬能基礎資料型別轉換器,一招解決所有基礎型別轉換煩惱
- 閒話 .NET(7):.NET Core 能淘汰 .NET FrameWork 嗎?
- 常用的 4 種 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)對比總結
- C# AutoMapper 10個常用方法總結
- C# 7個方法比較兩個物件是否相等
- C# 去掉字串最後一個字元的 4 種方法