首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET 中 Session 取值拋出 NullReferenceException 的解決方法

     編輯:程式設計綜合問答

在 ASP.NET WebForms 中,登錄後將用戶信息存入 Session,並在其他頁面讀取時,若直接調用 Session["UNAME"].ToString() 容易拋出「對象引用未設置為對象的實例」異常。這是因為 Session 可能為 null(如會話過期、應用程序池回收、跨域訪問等)。

錯誤代碼示例

// 登錄頁存儲
Session["UID"] = UID;
Session["UNAME"] = UserName;

// 其他頁面讀取
var User = Session["UNAME"].ToString(); // 若 Session["UNAME"] 為 null,此處拋出異常

安全取值模式

推薦使用擴展方法或輔助類進行防空判斷:

public static string GetSessionString(this HttpSessionState session, string key)
{
    return session[key]?.ToString() ?? string.Empty;
}

// 使用
var userName = Session.GetSessionString("UNAME");
if (!string.IsNullOrEmpty(userName))
{
    // 業務邏輯
}

進階:封裝當前用戶上下文

建立靜態類 CurrentUser 統一管理:

public static class CurrentUser
{
    public static string UserName
    {
        get => HttpContext.Current.Session["UNAME"]?.ToString();
        set => HttpContext.Current.Session["UNAME"] = value;
    }
    public static bool IsLoggedIn => !string.IsNullOrEmpty(UserName);
}

// 登錄時
CurrentUser.UserName = UserName;

// 業務代碼中
if (CurrentUser.IsLoggedIn)
{
    var name = CurrentUser.UserName;
}

常見誤區

  • 以為 Session 永久有效,實際默認 20 分鐘無操作即過期。
  • 未處理 Session 為 null 的情況直接調用 .ToString()。
  • 在異步處理或子線程中訪問 HttpContext.Current.Session 為 null。

採用防空取值模式並封裝用戶上下文,能從根本上避免 NullReferenceException,提高代碼健壯性與可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved