在開發ASP.NET程序時,需要對相關數據進行緩存,緩存較多的主要是用戶的身份信息,現提供幾個對session操作較為常用的方法:
1.添加session,對設置對應的時間:
/// <summary> /// 添加Session,調動有效期為30分鐘 /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <param name="strValue">Session值</param> public static void Add(string strSessionName, string strValue) { HttpContext.Current.Session[strSessionName] = strValue; HttpContext.Current.Session.Timeout = 30; }
/// <summary> /// 添加Session,調動有效期為30分鐘 /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <param name="strValues">Session值數組</param> public static void Adds(string strSessionName, string[] strValues) { HttpContext.Current.Session[strSessionName] = strValues; HttpContext.Current.Session.Timeout = 30; }
/// <summary> /// 添加Session /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <param name="strValue">Session值</param> /// <param name="iExpires">調動有效期(分鐘)</param> public static void Add(string strSessionName, string strValue, int iExpires) { HttpContext.Current.Session[strSessionName] = strValue; HttpContext.Current.Session.Timeout = iExpires; }
/// <summary> /// 添加Session /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <param name="strValues">Session值數組</param> /// <param name="iExpires">調動有效期(分鐘)</param> public static void Adds(string strSessionName, string[] strValues, int iExpires) { HttpContext.Current.Session[strSessionName] = strValues; HttpContext.Current.Session.Timeout = iExpires; }
以上對session的添加操作中,主要是參數值的類型不同,以後後兩種方式中,對session的有效時間進行滑動設置。
2.session的讀取操作:
/// <summary> /// 讀取某個Session對象值 /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <returns>Session對象值</returns> public static string Get(string strSessionName) { if (HttpContext.Current.Session[strSessionName] == null) { return null; } return HttpContext.Current.Session[strSessionName].ToString(); }
/// <summary> /// 讀取某個Session對象值數組 /// </summary> /// <param name="strSessionName">Session對象名稱</param> /// <returns>Session對象值數組</returns> public static string[] Gets(string strSessionName) { if (HttpContext.Current.Session[strSessionName] == null) { return null; } return (string[])HttpContext.Current.Session[strSessionName]; }
3.session的刪除操作:
/// <summary> /// 刪除某個Session對象 /// </summary> /// <param name="strSessionName">Session對象名稱</param> public static void Del(string strSessionName) { HttpContext.Current.Session[strSessionName] = null; }
session的操作中主要包含ID和Value,無論是寫入還是讀取,SessionId可以做唯一性標記。
4.HttpContext和HttpSessionState的源碼如下:
/// <summary> /// 封裝有關個別 HTTP 請求的所有 HTTP 特定的信息。 /// </summary> public sealed class HttpContext : IServiceProvider, IPrincipalContainer { /// <summary> /// 使用指定的請求和響應對象初始化 <see cref="T:System.Web.HttpContext"/> 類的新實例。 /// </summary> /// <param name="request">當前 HTTP 請求的 <see cref="T:System.Web.HttpRequest"/> 對象。</param><param name="response">當前 HTTP 請求的 <see cref="T:System.Web.HttpResponse"/> 對象。</param> public HttpContext(HttpRequest request, HttpResponse response); /// <summary> /// 使用指定的輔助請求對象初始化 <see cref="T:System.Web.HttpContext"/> 類的新實例。 /// </summary> /// <param name="wr">當前 HTTP 請求的 <see cref="T:System.Web.HttpWorkerRequest"/> 對象。</param> public HttpContext(HttpWorkerRequest wr); /// <summary> /// 接受一個使用指定的用戶函數的 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求。 /// </summary> /// <param name="userFunc">用戶函數。</param><exception cref="T:System.ArgumentNullException"><paramref name="userFunc"/> 參數為 null。</exception><exception cref="T:System.NotSupportedException">該請求不是一個<see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求。</exception> [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public void AcceptWebSocketRequest(Func<AspNetWebSocketContext, Task> userFunc); /// <summary> /// 接受一個使用指定的用戶函數和選項對象 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求。 /// </summary> /// <param name="userFunc">用戶函數。</param><param name="options">選項對象。</param><exception cref="T:System.ArgumentNullException"><paramref name="userFunc"/> 參數為 null。</exception><exception cref="T:System.NotSupportedException">該請求不是一個<see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求。</exception> public void AcceptWebSocketRequest(Func<AspNetWebSocketContext, Task> userFunc, AspNetWebSocketOptions options); /// <summary> /// 引發在請求的 HTTP 部件結束時發生的虛擬事件。 /// </summary> /// /// <returns> /// 訂閱標記。 /// </returns> /// <param name="callback">HTTP 上下文對象。</param><exception cref="T:System.ArgumentNullException"><paramref name="callback"/> 參數為 null。</exception> public ISubscriptionToken AddOnRequestCompleted(Action<HttpContext> callback); /// <summary> /// 啟動一個對象 <see cref="M:System.IDisposable.Dispose"/> 方法的調用,當此請求 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 的連接部分完成時。 /// </summary> /// /// <returns> /// 訂閱標記。 /// </returns> /// <param name="target">當該請求的 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 部分完成時其 <see cref="M:System.IDisposable.Dispose"/> 方法必須被調用的對象。</param> public ISubscriptionToken DisposeOnPipelineCompleted(IDisposable target); /// <summary> /// 返回當前服務類型的對象。 /// </summary> /// /// <returns> /// 如果找到服務,則為 <see cref="T:System.Web.HttpContext"/>;否則為 null。 /// </returns> /// <param name="service">要將服務提供商設置為的 <see cref="T:System.Web.HttpContext"/> 服務類型。</param> object IServiceProvider.GetService(Type service); /// <summary> /// 用於為請求指定處理程序。 /// </summary> /// <param name="handler">應處理請求的對象。</param><exception cref="T:System.InvalidOperationException"><see cref="M:System.Web.HttpContext.RemapHandler(System.Web.IHttpHandler)"/> 方法是在發生 <see cref="E:System.Web.HttpApplication.MapRequestHandler"/> 事件之後調用的。</exception> public void RemapHandler(IHttpHandler handler); /// <summary> /// 將異常添加到當前 HTTP 請求的異常集合中。 /// </summary> /// <param name="errorInfo">要添加到異常集合中的 <see cref="T:System.Exception"/>。</param> public void AddError(Exception errorInfo); /// <summary> /// 清除當前 HTTP 請求的所有錯誤。 /// </summary> public void ClearError(); /// <summary> /// 設置支持 HTTP 請求所需的會話狀態行為的類型。 /// </summary> /// <param name="sessionStateBehavior">枚舉值之一,該值指定需要什麼類型的會話狀態行為。</param><exception cref="T:System.InvalidOperationException">該方法在引發 <see cref="E:System.Web.HttpApplication.AcquireRequestState"/> 事件之後調用。</exception> public void SetSessionStateBehavior(SessionStateBehavior sessionStateBehavior); /// <summary> /// 為當前應用程序返回請求的配置信息。 /// </summary> /// /// <returns> /// 包含配置信息的對象。 (在使用之前,將返回的配置節強制轉換為適當的配置類型。) /// </returns> /// <param name="name">為其請求信息的應用程序配置標記。</param> [Obsolete("The recommended alternative is System.Web.Configuration.WebConfigurationManager.GetWebApplicationSection in System.Web.dll. http://go.microsoft.com/fwlink/?linkid=14202")] public static object GetAppConfig(string name); /// <summary> /// 為當前 HTTP 請求返回所請求的配置信息。 /// </summary> /// /// <returns> /// 如果該節不存在,則為指定的 <see cref="T:System.Configuration.ConfigurationSection"/>null,如果該節不能在運行時訪問,則為一個內部對象。 (在使用之前,將返回的對象強制轉換為適當的配置類型。) /// </returns> /// <param name="name">為其請求信息的配置標記。</param> [Obsolete("The recommended alternative is System.Web.HttpContext.GetSection in System.Web.dll. http://go.microsoft.com/fwlink/?linkid=14202")] [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public object GetConfig(string name); /// <summary> /// 獲取當前應用程序的默認配置的指定配置節。 /// </summary> /// /// <returns> /// 如果該節不存在,則為指定的 <see cref="T:System.Configuration.ConfigurationSection"/>null,如果該節不能在運行時訪問,則為一個內部對象。 /// </returns> /// <param name="sectionName">配置節路徑(使用 XPath 格式)和配置元素名稱。</param> public object GetSection(string sectionName); /// <summary> /// 使用給定路徑重寫 URL。 /// </summary> /// <param name="path">內部重寫路徑。</param><exception cref="T:System.ArgumentNullException"><paramref name="path"/> 參數為 null。</exception><exception cref="T:System.Web.HttpException"><paramref name="path"/> 參數不在當前應用程序的根目錄中。</exception> [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public void RewritePath(string path); /// <summary> /// 使用給定路徑和一個布爾值重寫 URL,該布爾值用於指定是否修改服務器資源的虛擬路徑。 /// </summary> /// <param name="path">內部重寫路徑。</param><param name="rebaseClientPath">如果重置虛擬路徑,則為 true;如果保持虛擬路徑不變,則為 false。</param><exception cref="T:System.ArgumentNullException"><paramref name="path"/> 參數為 null。</exception><exception cref="T:System.Web.HttpException"><paramref name="path"/> 參數不在當前應用程序的根目錄中。</exception> public void RewritePath(string path, bool rebaseClientPath); /// <summary> /// 使用給定的路徑、路徑信息和查詢字符串信息重寫 URL。 /// </summary> /// <param name="filePath">內部重寫路徑。</param><param name="pathInfo">資源的附加路徑信息。 有關更多信息,請參見 <see cref="P:System.Web.HttpRequest.PathInfo"/>。</param><param name="queryString">請求查詢字符串。</param><exception cref="T:System.ArgumentNullException"><paramref name="path"/> 參數不在當前應用程序的根目錄中。</exception><exception cref="T:System.Web.HttpException"><paramref name="filePath"/> 參數不在當前應用程序的根目錄中。</exception> public void RewritePath(string filePath, string pathInfo, string queryString); /// <summary> /// 使用給定虛擬路徑、路徑信息、查詢字符串信息和一個布爾值重寫 URL,該布爾值用於指定是否將客戶端文件路徑設置為重寫路徑。 /// </summary> /// <param name="filePath">服務請求的資源的虛擬路徑。</param><param name="pathInfo">用於 URL 重定向的附加路徑信息。 有關更多信息,請參見 <see cref="P:System.Web.HttpRequest.PathInfo"/>。</param><param name="queryString">用於 URL 重定向的請求查詢字符串。</param><param name="setClientFilePath">若要將用於客戶端資源的文件路徑設置為 <paramref name="filePath"/> 參數的值,則為 true;否則為 false。</param><exception cref="T:System.ArgumentNullException"><paramref name="path"/> 參數不在當前應用程序的根目錄中。</exception><exception cref="T:System.Web.HttpException"><paramref name="filePath"/> 參數不在當前應用程序的根目錄中。</exception> public void RewritePath(string filePath, string pathInfo, string queryString, bool setClientFilePath); /// <summary> /// 根據指定的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ClassKey"/> 和 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性,獲取應用程序級別資源對象。 /// </summary> /// /// <returns> /// 一個 <see cref="T:System.Object"/>,表示請求的應用程序級別資源對象;否則,如果未找到資源對象,或找到了資源對象但其沒有請求的屬性,則為 null。 /// </returns> /// <param name="classKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ClassKey"/> 屬性。</param><param name="resourceKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性。</param><exception cref="T:System.Resources.MissingManifestResourceException">未找到具有指定 <paramref name="classKey"/> 參數的資源對象。 - 或 - 主程序集不包含非特定區域性的資源,而由於缺少相應的附屬程序集,這些資源又是必需的。</exception> [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public static object GetGlobalResourceObject(string classKey, string resourceKey); /// <summary> /// 根據指定的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ClassKey"/> 和 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性以及 <see cref="T:System.Globalization.CultureInfo"/> 對象,獲取一個應用程序級別資源對象。 /// </summary> /// /// <returns> /// 一個 <see cref="T:System.Object"/>,表示請求的應用程序級別資源對象(對指定區域性對其進行了本地化);否則,如果未找到資源對象,或找到了資源對象但其沒有請求的屬性,則為 null。 /// </returns> /// <param name="classKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ClassKey"/> 屬性。</param><param name="resourceKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性。</param><param name="culture">一個字符串,表示請求的資源的 <see cref="T:System.Globalization.CultureInfo"/> 對象。</param><exception cref="T:System.Resources.MissingManifestResourceException">未找到具有指定 <paramref name="classKey"/> 參數的資源對象。 - 或 - 主程序集不包含非特定區域性的資源,而由於缺少相應的附屬程序集,這些資源又是必需的。</exception> public static object GetGlobalResourceObject(string classKey, string resourceKey, CultureInfo culture); /// <summary> /// 根據指定的 <see cref="P:System.Web.Compilation.ExpressionBuilderContext.VirtualPath"/> 和 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性,獲取頁級別資源對象。 /// </summary> /// /// <returns> /// <see cref="T:System.Object"/>,表示請求的頁級別資源對象;否則,如果找到了匹配的資源對象但不是 <paramref name="resourceKey"/> 參數,則為 null。 /// </returns> /// <param name="virtualPath">本地資源對象的 <see cref="P:System.Web.Compilation.ExpressionBuilderContext.VirtualPath"/> 屬性。</param><param name="resourceKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性。</param><exception cref="T:System.Resources.MissingManifestResourceException">未找到具有指定 <paramref name="virtualPath"/> 參數的資源對象。</exception><exception cref="T:System.ArgumentException">指定的 <paramref name="virtualPath"/> 參數不在當前應用程序的根目錄中。</exception><exception cref="T:System.InvalidOperationException">未能找到頁的資源類。</exception> [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public static object GetLocalResourceObject(string virtualPath, string resourceKey); /// <summary> /// 根據指定的 <see cref="P:System.Web.Compilation.ExpressionBuilderContext.VirtualPath"/> 和 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性以及 <see cref="T:System.Globalization.CultureInfo"/> 對象,獲取一個頁級別資源對象。 /// </summary> /// /// <returns> /// <see cref="T:System.Object"/>,表示請求的本地資源對象(針對指定區域性進行了本地化的對象);否則,如果找到了匹配的資源對象但不是 <paramref name="resourceKey"/> 參數,則為 null。 /// </returns> /// <param name="virtualPath">本地資源對象的 <see cref="P:System.Web.Compilation.ExpressionBuilderContext.VirtualPath"/> 屬性。</param><param name="resourceKey">一個字符串,表示所請求資源對象的 <see cref="P:System.Web.Compilation.ResourceExpressionFields.ResourceKey"/> 屬性。</param><param name="culture">一個字符串,表示所請求資源對象的 <see cref="T:System.Globalization.CultureInfo"/> 對象。</param><exception cref="T:System.Resources.MissingManifestResourceException">未找到具有指定 <paramref name="virtualPath"/> 參數的資源對象。</exception><exception cref="T:System.ArgumentException">指定的 <paramref name="virtualPath"/> 參數不在當前應用程序的根目錄中。</exception><exception cref="T:System.InvalidOperationException">未能找到頁的資源類。</exception> public static object GetLocalResourceObject(string virtualPath, string resourceKey, CultureInfo culture); /// <summary> /// 獲取一個值,該值指示此請求是否是一個 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求。 /// </summary> /// /// <returns> /// 如果該請求是一 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/>請求,則為 true,否則為 false。 /// </returns> public bool IsWebSocketRequest { get; } /// <summary> /// 獲取指示連接是否從 HTTP連接升級到 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 連接的值。 /// </summary> /// /// <returns> /// 如果連接正在升級,則為 true;否則為 false。 /// </returns> public bool IsWebSocketRequestUpgrading { get; } /// <summary> /// 獲取客戶要求的子協議列表的有序列表。 /// </summary> /// /// <returns> /// 為請求的協議,或如果不是 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 請求,或者列表不存在則為 null。 /// </returns> public IList<string> WebSocketRequestedProtocols { get; } /// <summary> /// 獲取用於 <see cref="T:System.Web.WebSockets.AspNetWebSocket"/> 連接而從服務器發送到客戶端的協商協議。 /// </summary> /// /// <returns> /// 協商的協議。 /// </returns> public string WebSocketNegotiatedProtocol { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; } /// <summary> /// 為當前 HTTP 請求獲取或設置 <see cref="T:System.Web.HttpContext"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.HttpContext"/>。 /// </returns> public static HttpContext Current { get; set; } /// <summary> /// 獲取或設置包含適用於異步預加載模式的標志的對象。 /// </summary> /// /// <returns> /// 包含適用於異步預加載模式的標志的對象。 /// </returns> public AsyncPreloadModeFlags AsyncPreloadMode { get; set; } /// <summary> /// 獲取或設置一個值,此值指示 ASP.NET 請求處理過程中是否允許非預期的異步操作。 /// </summary> /// /// <returns> /// 當異步 API 在不是預期的時間使用時 ASP.NET 將引發異常,則 false,否則為 true。 默認值為 false。 /// </returns> [EditorBrowsable(EditorBrowsableState.Advanced)] public bool AllowAsyncDuringSyncStages { get; set; } /// <summary> /// 為當前 HTTP 請求獲取或設置 <see cref="T:System.Web.HttpApplication"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.HttpApplication"/>。 ASP.NET 使用 ApplicationInstance 代替 Application 作為屬性名來指代當前的 <see cref="T:System.Web.HttpApplication"/> 實例,以避免 ASP.NET 與經典 ASP 之間產生混淆。 在經典 ASP 中,Application 指代全局應用程序狀態字典。 /// </returns> /// <exception cref="T:System.InvalidOperationException">Web 應用程序正在 IIS 7.0 集成模式下運行,並且已嘗試將屬性值從非 NULL 值更改為 null。</exception> public HttpApplication ApplicationInstance { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; set; } /// <summary> /// 為當前 HTTP 請求獲取 <see cref="T:System.Web.HttpApplicationState"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.HttpApplicationState"/>。 若要獲取當前 HTTP 請求的 <see cref="T:System.Web.HttpApplication"/> 對象,請使用 <see cref="P:System.Web.HttpContext.ApplicationInstance"/>。 (ASP.NET 使用 ApplicationInstance 代替 Application 作為屬性名來指代當前的 <see cref="T:System.Web.HttpApplication"/> 實例,以避免 ASP.NET 與經典 ASP 之間產生混淆。 在經典 ASP 中,Application 指代全局應用程序狀態字典。) /// </returns> public HttpApplicationState Application { get; } /// <summary> /// 獲取或設置負責處理 HTTP 請求的 <see cref="T:System.Web.IHttpHandler"/> 對象。 /// </summary> /// /// <returns> /// 負責處理 HTTP 請求的 <see cref="T:System.Web.IHttpHandler"/>。 /// </returns> public IHttpHandler Handler { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; set; } /// <summary> /// 獲取父處理程序的 <see cref="T:System.Web.IHttpHandler"/> 對象。 /// </summary> /// /// <returns> /// <see cref="T:System.Web.IHttpHandler"/> 實例,如果未找到上一個處理程序,則為 null。 /// </returns> public IHttpHandler PreviousHandler { get; } /// <summary> /// 獲取表示當前正在執行的處理程序的 <see cref="T:System.Web.IHttpHandler"/> 對象。 /// </summary> /// /// <returns> /// 一個 <see cref="T:System.Web.IHttpHandler"/>,表示當前正在執行的處理程序。 /// </returns> public IHttpHandler CurrentHandler { get; } /// <summary> /// 獲取當前 HTTP 請求的 <see cref="T:System.Web.HttpRequest"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.HttpRequest"/>。 /// </returns> /// <exception cref="T:System.Web.HttpException">Web 應用程序正在 IIS 7 的“集成”模式下運行。</exception> public HttpRequest Request { [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get; } /// <summary> /// 獲取當前 HTTP 響應的 <see cref="T:System.Web.HttpResponse"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 響應的 <see cref="T:System.Web.HttpResponse"/>。 /// </returns> /// <exception cref="T:System.Web.HttpException">Web 應用程序正在 IIS 7 的“集成”模式下運行。</exception> public HttpResponse Response { [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get; } /// <summary> /// 為當前 HTTP 響應獲取 <see cref="T:System.Web.TraceContext"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 響應的 <see cref="T:System.Web.TraceContext"/>。 /// </returns> public TraceContext Trace { get; } /// <summary> /// 獲取可用於在 HTTP 請求過程中在 <see cref="T:System.Web.IHttpModule"/> 接口和 <see cref="T:System.Web.IHttpHandler"/> 接口之間組織和共享數據的鍵/值集合。 /// </summary> /// /// <returns> /// <see cref="T:System.Collections.IDictionary"/> 鍵/值集合,按指定的鍵提供對集合中個別值的訪問。 /// </returns> public IDictionary Items { get; } /// <summary> /// 為當前 HTTP 請求獲取 <see cref="T:System.Web.SessionState.HttpSessionState"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.SessionState.HttpSessionState"/> 對象。 /// </returns> public HttpSessionState Session { get; } /// <summary> /// 獲取提供用於處理 Web 請求的方法的 <see cref="T:System.Web.HttpServerUtility"/> 對象。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Web.HttpServerUtility"/>。 /// </returns> public HttpServerUtility Server { get; } /// <summary> /// 獲取在處理 HTTP 請求的過程中累積的第一個錯誤(如果有)。 /// </summary> /// /// <returns> /// 當前 HTTP 請求/響應過程的第一個 <see cref="T:System.Exception"/>;如果在處理 HTTP 請求期間沒有發生任何錯誤,則為 null。 默認值為 null。 /// </returns> public Exception Error { get; } /// <summary> /// 獲取在處理 HTTP 請求的過程中累積的錯誤數組。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的 <see cref="T:System.Exception"/> 對象數組。 /// </returns> public Exception[] AllErrors { get; } /// <summary> /// 為當前 HTTP 請求獲取或設置安全信息。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的安全信息。 /// </returns> public IPrincipal User { get; [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries"), SecurityPermission(SecurityAction.Demand, ControlPrincipal = true)] set; } /// <summary> /// 獲取當前用戶配置文件的 <see cref="T:System.Web.Profile.ProfileBase"/> 對象。 /// </summary> /// /// <returns> /// 如果應用程序配置文件包含配置文件的屬性的定義,則為 <see cref="T:System.Web.Profile.ProfileBase"/>;否則為 null。 /// </returns> public ProfileBase Profile { get; } /// <summary> /// 獲取或設置一個值,該值指定 <see cref="T:System.Web.Security.UrlAuthorizationModule"/> 對象是否應跳過對當前請求的授權檢查。 /// </summary> /// /// <returns> /// 如果 <see cref="T:System.Web.Security.UrlAuthorizationModule"/> 應跳過授權檢查,則為 true;否則為 false。 默認值為 false。 /// </returns> public bool SkipAuthorization { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries"), SecurityPermission(SecurityAction.Demand, ControlPrincipal = true)] set; } /// <summary> /// 獲取一個值,該值指示當前 HTTP 請求是否處於調試模式。 /// </summary> /// /// <returns> /// 如果請求處於調試模式,則為 true;否則,為 false。 /// </returns> public bool IsDebuggingEnabled { get; } /// <summary> /// 獲取一個值,該值指示是否已為當前 HTTP 請求啟用自定義錯誤。 /// </summary> /// /// <returns> /// 如果啟用了自定義錯誤,則為 true;否則,為 false。 /// </returns> public bool IsCustomErrorEnabled { get; } /// <summary> /// 獲取當前 HTTP 請求的初始時間戳。 /// </summary> /// /// <returns> /// 當前 HTTP 請求的時間戳。 /// </returns> public DateTime Timestamp { get; } /// <summary> /// 獲取當前應用程序域的 <see cref="T:System.Web.Caching.Cache"/> 對象。 /// </summary> /// /// <returns> /// 當前應用程序域的 <see cref="T:System.Web.Caching.Cache"/>。 /// </returns> public Cache Cache { get; } /// <summary> /// 獲取此要求的頁檢測服務實例的引用。 /// </summary> /// /// <returns> /// 此請求的頁檢測服務實例。 /// </returns> public PageInstrumentationService PageInstrumentation { get; } /// <summary> /// 獲取或設置一個值,此值指示 ASP.NET 運行時是否應在請求超時時,調用為該請求提供服務的線程上的 <see cref="M:System.Threading.Thread.Abort"/>。 /// </summary> /// /// <returns> /// true 如果 <see cref="M:System.Threading.Thread.Abort"/> 將調用,當線程時間;否則, false。 默認值為 true。 /// </returns> public bool ThreadAbortOnTimeout { get; set; } /// <summary> /// 獲取一個 <see cref="T:System.Web.RequestNotification"/> 值,該值指示當前正在處理的 <see cref="T:System.Web.HttpApplication"/> 事件。 /// </summary> /// /// <returns> /// <see cref="T:System.Web.RequestNotification"/> 值之一。 /// </returns> /// <exception cref="T:System.PlatformNotSupportedException">操作要求 IIS 7 處於集成管線模式,並且要求 .NET Framework 至少為 3.0 版本。</exception> public RequestNotification CurrentNotification { get; internal set; } /// <summary> /// 在 <see cref="T:System.Web.HttpApplication"/> 事件完成處理之後獲取 ASP.NET 管道的當前進程點的值。 /// </summary> /// /// <returns> /// 如果啟用了自定義錯誤,則為 true;否則,為 false。 /// </returns> /// <exception cref="T:System.PlatformNotSupportedException">操作要求 IIS 7 中的集成管線模式並且要求為 .NET Framework 3.0。</exception> public bool IsPostNotification { get; internal set; } }
/// <summary> /// 提供對會話狀態值以及會話級別設置和生存期管理方法的訪問。 /// </summary> public sealed class HttpSessionState : ICollection, IEnumerable { /// <summary> /// 取消當前會話。 /// </summary> public void Abandon(); /// <summary> /// 向會話狀態集合添加一個新項。 /// </summary> /// <param name="name">要添加到會話狀態集合的項的名稱。</param><param name="value">要添加到會話狀態集合的項的值。</param> public void Add(string name, object value); /// <summary> /// 刪除會話狀態集合中的項。 /// </summary> /// <param name="name">要從會話狀態集合中刪除的項的名稱。</param> public void Remove(string name); /// <summary> /// 刪除會話狀態集合中指定索引處的項。 /// </summary> /// <param name="index">要從會話狀態集合中移除的項的索引。</param><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> 小於零。 - 或 - <paramref name="index"/> 等於或大於 <see cref="P:System.Web.SessionState.HttpSessionState.Count"/>。</exception> public void RemoveAt(int index); /// <summary> /// 從會話狀態集合中移除所有的鍵和值。 /// </summary> public void Clear(); /// <summary> /// 從會話狀態集合中移除所有的鍵和值。 /// </summary> [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public void RemoveAll(); /// <summary> /// 返回一個枚舉數,可用來讀取當前會話中所有會話狀態的變量名稱。 /// </summary> /// /// <returns> /// <see cref="T:System.Collections.IEnumerator"/> 可以循環訪問會話狀態集合中的變量名稱。 /// </returns> public IEnumerator GetEnumerator(); /// <summary> /// 將會話狀態值的集合復制到一維數組中(從數組的指定索引處開始)。 /// </summary> /// <param name="array"><see cref="T:System.Array"/>,它接收會話值。</param><param name="index"><paramref name="array"/> 中從零開始的索引,在此處開始復制。</param> public void CopyTo(Array array, int index); /// <summary> /// 獲取會話的唯一標識符。 /// </summary> /// /// <returns> /// 唯一會話標識符。 /// </returns> public string SessionID { get; } /// <summary> /// 獲取並設置在會話狀態提供程序終止會話之前各請求之間所允許的時間(以分鐘為單位)。 /// </summary> /// /// <returns> /// 超時期限(以分鐘為單位)。 /// </returns> public int Timeout { get; set; } /// <summary> /// 獲取一個值,該值指示會話是否是與當前請求一起創建的。 /// </summary> /// /// <returns> /// 如果會話是與當前請求一起創建的,則為 true;否則,為 false。 /// </returns> public bool IsNewSession { get; } /// <summary> /// 獲取當前會話狀態模式。 /// </summary> /// /// <returns> /// <see cref="T:System.Web.SessionState.SessionStateMode"/> 值之一。 /// </returns> public SessionStateMode Mode { get; } /// <summary> /// 獲取一個值,該值指示會話 ID 是嵌入在 URL 中還是存儲在 HTTP Cookie 中。 /// </summary> /// /// <returns> /// 如果會話嵌入在 URL 中,則為 true;否則,為 false。 /// </returns> public bool IsCookieless { get; } /// <summary> /// 獲取一個值,該值指示是否為無 Cookie 會話配置應用程序。 /// </summary> /// /// <returns> /// 指示是否為無 Cookie 會話配置應用程序的其中一個 <see cref="T:System.Web.HttpCookieMode"/> 值。 默認值為 <see cref="F:System.Web.HttpCookieMode.UseCookies"/>。 /// </returns> public HttpCookieMode CookieMode { get; } /// <summary> /// 獲取或設置當前會話的區域設置標識符 (LCID)。 /// </summary> /// /// <returns> /// 指定當前會話的區域性的 <see cref="T:System.Globalization.CultureInfo"/> 實例。 /// </returns> public int LCID { get; set; } /// <summary> /// 獲取或設置當前會話的字符集標識符。 /// </summary> /// /// <returns> /// 當前會話的字符集標識符。 /// </returns> public int CodePage { get; set; } /// <summary> /// 獲取對當前會話狀態對象的引用。 /// </summary> /// /// <returns> /// 當前 <see cref="T:System.Web.SessionState.HttpSessionState"/>。 /// </returns> public HttpSessionState Contents { get; } /// <summary> /// 獲取由 ASP.NET 應用程序文件 Global.asax 中的 <object Runat="Server" Scope="Session"/> 標記聲明的對象的集合。 /// </summary> /// /// <returns> /// 一個 <see cref="T:System.Web.HttpStaticObjectsCollection"/>,它包含在 Global.asax 文件中聲明的對象。 /// </returns> public HttpStaticObjectsCollection StaticObjects { get; } /// <summary> /// 按名稱獲取或設置會話值。 /// </summary> /// /// <returns> /// 具有指定名稱的會話狀態值;如果該項不存在,則為 null。 /// </returns> /// <param name="name">會話值的鍵名。</param> public object this[string name] { get; set; } /// <summary> /// 按數字索引獲取或設置會話值。 /// </summary> /// /// <returns> /// 存儲在指定索引處的會話狀態值;如果該項不存在,則為 null。 /// </returns> /// <param name="index">會話值的數字索引。</param> public object this[int index] { get; set; } /// <summary> /// 獲取會話狀態集合中的項數。 /// </summary> /// /// <returns> /// 集合中的項數。 /// </returns> public int Count { get; } /// <summary> /// 獲取存儲在會話狀態集合中所有值的鍵的集合。 /// </summary> /// /// <returns> /// 包含所有會話鍵的 <see cref="T:System.Collections.Specialized.NameObjectCollectionBase.KeysCollection"/>。 /// </returns> public NameObjectCollectionBase.KeysCollection Keys { get; } /// <summary> /// 獲取一個對象,該對象可用於同步對會話狀態值的集合的訪問。 /// </summary> /// /// <returns> /// 可用於同步集合訪問的對象。 /// </returns> public object SyncRoot { get; } /// <summary> /// 獲取一個值,該值指示會話是否為只讀。 /// </summary> /// /// <returns> /// 如果會話為只讀,則為 true;否則為 false。 /// </returns> public bool IsReadOnly { get; } /// <summary> /// 獲取一個值,該值指示對會話狀態值的集合的訪問是否是同步(線程安全)的。 /// </summary> /// /// <returns> /// 如果對該集合的訪問是同步的(線程安全),則為 true;否則,為 false。 /// </returns> public bool IsSynchronized { get; } }
注:較多的.net程序員在項目開發和學習中,較少去直接查看.net提供的源碼,在查看源碼的過程中,會發現該類實現的一些接口和繼承的抽象類,有助於我們更好的了解該類的特性。