ASP.NET Session串聯問題解決方案,解決同一個瀏覽器登陸多個賬號串聯的問題

 

第一步在登錄頁面

public ActionResult login(string url)
        {
            if (Session["UserId"] != null && Session["UserId"].ToString() != "")//這個根據自己的開發項目編寫,這個是判斷seesion用戶是否存在
                return Redirect("index");
            else
            {
                if (Request.Cookies["__LOGINCOOKIE__"] == null || Request.Cookies["__LOGINCOOKIE__"].Value == "")
                {
                    Session.Abandon();
                    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "Test", DateTime.Now, DateTime.Now.AddSeconds(5), false, "");
                    string encryptedText = FormsAuthentication.Encrypt(ticket);
                    Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", encryptedText));
                    return Redirect("login");
                }
                else
                {
                    Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", ""));
                }
            }
            ViewBag.url = url;
            return View();


        }

 

第二步配置web.config

<sessionState mode="StateServer" cookieless="UseUri" regenerateExpiredSessionId="true" stateNetworkTimeout="120" timeout="120"></sessionState>

 

只要兩步設置好,同一個瀏覽器登陸兩個賬號,兩個賬號不會串聯。

 

sessionState參數說明:

屬性

說明

allowCustomSqlDatabase

可選的 Boolean 屬性。

指定會話狀態 SQL 數據庫是否可以是自定義數據庫(而不是 ASP.NET 默認數據庫)。如果爲 false,則不能指定初始目錄或數據庫作爲 sqlConnectionString 屬性的值。默認會話狀態 SQL 數據庫爲 ASPState 數據庫。有關更多信息,請參見會話狀態模式。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 false。

cookieless

可選的 HttpCookieMode 屬性。

指定對於 Web 應用程序使用 Cookie 的方式。

cookieless 屬性可以爲下列可能值之一。默認值爲 UseCookies。

說明

AutoDetect

ASP.NET 確定請求瀏覽器或請求設備是否支持 Cookie。如果請求瀏覽器或請求設備支持 Cookie,則 AutoDetect 使用 Cookie 來保留用戶數據;否則,將在查詢字符串中使用一個標識符。如果瀏覽器或設備支持 Cookie,但當前禁用了 Cookie,則請求功能仍會使用 Cookie。

UseCookies

無論瀏覽器或設備是否支持 Cookie,都使用 Cookie 來保留用戶數據。

UseDeviceProfile

ASP.NET 根據 HttpBrowserCapabilities 設置來確定是否使用 Cookie。如果 HttpBrowserCapabilities 設置指示瀏覽器或設備支持 Cookie,將使用 Cookie;否則,將在查詢字符串中使用一個標識符。

UseUri

無論瀏覽器或設備是否支持 Cookie,調用功能都使用查詢字符串來存儲標識符。

 

cookieName

可選的 String 屬性。

指定存儲會話標識符的 Cookie 的名稱。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 "ASP.NET_SessionId"。

customProvider

可選的 String 屬性。

指定用於存儲和檢索會話狀態數據的自定義會話狀態提供程序的名稱。該提供程序在 providers 元素中指定。僅當會話狀態模式設置爲 Custom 值時,才使用該提供程序。有關更多信息,請參見會話狀態模式。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲空字符串 ("")。

mode

可選的 SessionStateMode 屬性。

指定存儲會話狀態值的位置。有關更多信息,請參見會話狀態模式。

mode 屬性可以爲下列可能值之一。默認值爲 InProc。

說明

Custom

會話狀態將使用自定義數據存儲區來存儲會話狀態信息。

InProc

會話處於正在處理 ASP.NET 輔助進程的狀態。

Off

會話狀態被禁用。

SQLServer

會話狀態將使用進程外 SQL Server 數據庫來存儲狀態信息。

StateServer

會話狀態將使用進程外 ASP.NET 狀態服務來存儲狀態信息。

 

partitionResolverType

可選的 String 屬性。

指定在哪裏存儲會話狀態。如果 partitionResolverType 屬性中指定了值,則忽略 sqlConnectionString 和 stateConnectionString 屬性。PartitionResolverType 屬性返回的連接字符串將用於每個請求,爲請求的其餘部分連接到適當的服務器位置。如果連接字符串無效,ASP.NET 將引發一個異常,該異常與當配置的服務器連接字符串無效時引發的異常相同。該屬性用於在 SQL 或狀態服務器模式下在多個後端節點上劃分會話狀態數據。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲空字符串。

regenerateExpiredSessionId

可選的 Boolean 屬性。

指定當客戶端指定了過期的會話 ID 時是否重新發出會話 ID。默認情況下,當啓用了 regenerateExpiredSessionId 時,僅爲 cookieless 模式重新發出會話 ID。有關更多信息,請參見 IsCookieless。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 true。

sqlCommandTimeout

可選的 TimeSpan 屬性。

指定使用 SQL Server 會話狀態模式的 SQL 命令的持續時間超時(秒)。持續時間超時是 SQL 命令可以處於空閒狀態的時間(秒),超過此時間之後,該命令將被取消。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 0:00:30(30 秒)。

sqlConnectionString

可選的 String 屬性。

爲運行 SQL Server 的計算機指定連接字符串。該屬性在 mode 屬性設置爲 SQLServer 值時是必需的。有關更多信息,請參見會話狀態模式。

注意

若要在使用 SQLServer 模式時提高您的應用程序的安全性,請使用受保護的配置來加密配置的 sessionState 節,以幫助保護 sqlConnectionString 值。

默認值爲 "data source=127.0.0.1;Integrated Security=SSPI"。

stateConnectionString

可選的 String 屬性。

指定遠程存儲會話狀態的服務器名稱或地址以及端口。端口值必須爲 42424。當 mode 爲 StateServer 值時,該屬性是必需的。確保運行 ASP.NET 狀態服務的服務器是存儲會話狀態信息的遠程服務器。該服務隨 ASP.NET 一起安裝,默認情況下爲 %SystemRoot%\Microsoft.NET\Framework\VersionNumber\aspnet_state.exe。有關更多信息,請參見會話狀態模式。

注意

若要在使用 StateServer 模式時提高您的應用程序的安全性,請使用受保護的配置來加密配置的 <sessionState> 節,以幫助保護 stateConnectionString 值。

默認值爲 "tcpip=127.0.0.1:42424"。

stateNetworkTimeout

可選的 TimeSpan 屬性。

指定 Web 服務器與狀態服務器之間的 TCP/IP 網絡連接可以處於空閒狀態的時間(秒),超過此時間後,請求將被取消。該屬性在 mode 屬性設置爲 StateServer 值時使用。

默認值爲 10 秒。

timeout

可選的 TimeSpan 屬性。

指定在放棄一個會話前該會話可以處於空閒狀態的分鐘數。對於進程內和狀態服務器模式,timeout 屬性不能設置爲大於 525,601 分鐘(1 年)的值。

會話 timeout 配置設置僅適用於 ASP.NET 頁。更改會話 timeout 值不會影響 ASP 頁的會話超時時間。同樣,更改 ASP 頁的會話超時時間不會影響 ASP.NET 頁的會話超時時間。

默認值爲 20 分鐘。

useHostingIdentity

可選的 Boolean 屬性。

指定會話狀態將恢復爲宿主標識還是使用客戶端模擬。

如果爲 true,ASP.NET 將使用下列進程憑據之一來連接會話狀態存儲區:

宿主進程;對於 Microsoft Internet 信息服務 [IIS] 5 和 5.1 版爲 ASPNET,對於 Microsoft Windows Server 2003 則爲 NETWORK SERVICE。

應用程序模擬標識,當使用了以下配置時使用此憑據:

<identity impersonate="true" userName="user" password="pwd" />

如果爲 false,ASP.NET 將使用目前與當前請求的操作系統線程關聯的憑據來連接會話狀態存儲區。對於客戶端模擬,ASP.NET 將使用與瀏覽器協商的安全憑據來連接會話狀態存儲區。如果爲 false,ASP.NET 在連接會話狀態存儲區時不會恢復爲進程標識或應用程序模擬標識。有關更多信息,請參見 ASP.NET 模擬。

此屬性是 .NET Framework 2.0 版中的新屬性。

默認值爲 true。

注意

在 .NET Framework 1.1 版中,如果 mode 屬性設置爲 SQLServer,並且客戶端模擬有效,則 ASP.NET 使用來自 ASP.NET 客戶端模擬的客戶端憑據連接到運行 SQL Server 的計算機。

 

繼承的屬性

可選的屬性。

由所有節元素繼承的屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章