Session 不一樣子域共享

Session 不一樣子域共享

1.問題:

配置:html

<configuration>
    <appSettings>
    <add key="Domain" value=".wubaobao.com"/></appSettings></configuration><system.web>
		<machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>
		<sessionState cookieless="false" timeout="50" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/></system.web>

配置同一臺機子Session Web.config裏面已經好了,可是該項目仍然不能共享其餘域的Session

2.解決

參考:web

Robin99:http://www.cnblogs.com/yinhaiming/articles/1407679.html

添加Global.asax:sql

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // 在應用程序啓動時運行的代碼

    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在應用程序關閉時運行的代碼

    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出現未處理的錯誤時運行的代碼

    }

    void Session_Start(object sender, EventArgs e) 
    {
        string Domain = ConfigurationManager.AppSettings["Domain"];
        // 在新會話啓動時運行的代碼
        foreach (string key in Context.Response.Cookies.Keys)
        {
            Context.Response.Cookies[key].Domain = Domain;  //重寫子域下的Cookie.Domain 設置爲與其餘域相同的Domain
        }

    }

    void Session_End(object sender, EventArgs e) 
    {
        // 在會話結束時運行的代碼。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置爲
        // InProc 時,纔會引起 Session_End 事件。若是會話模式設置爲 StateServer 
        // 或 SQLServer,則不會引起該事件。

    }
       
</script>

3.結語

補充一點知識吧!(下面爲網上資源)數據庫

<sessionState> 元素

配置當前應用程序的會話狀態設置。服務器

配置結構的示例:cookie

<configuration>
   <system.web>
      <sessionState>網絡

<sessionState mode="Off|InProc|StateServer|SQLServer"
 cookieless="true|false"
 timeout="number of minutes"
 stateConnectionString="tcpip=server:port"
 sqlConnectionString="sql connection string"
 stateNetworkTimeout="number of seconds"/>

必需的屬性

屬性 選項 描述
mode   指定存儲會話狀態的位置。
  Off 指示會話狀態沒有啓用。
  InProc 指示本地存儲會話狀態。
  StateServer 指示在遠程服務器上存儲會話狀態。
  SQLServer 指示在 Microsoft SQL Server™ 上存儲會話狀態。

可選的屬性

屬性 選項 描述
cookieless   指定是否應該使用沒有 Cookie 的會話來標識客戶端會話。
  true 指示應該使用沒有 Cookie 的會話。
  false 指示不該使用沒有 Cookie 的會話。默認值是 false
timeout   指定會話在被放棄前處於空閒狀態的分鐘數。默認值是 20。
stateConnectionString   指定遠程存儲會話狀態所在的服務器名稱和端口。例如,"tcpip=127.0.0.1:42424"。當 mode StateServer 時,須要使用此屬性。
sqlConnectionString   爲 SQL Server 指定鏈接字符串。例如,"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。當 modeSQLServer 時,須要使用此屬性。
stateNetworkTimeout   當使用 StateServer 模式存儲會話狀態時,指定在會話被放棄前 Web 服務器和狀態服務器之間的 TCP/IP 網絡鏈接處於空閒狀態的秒數。默認值是 10。

註釋

使用 StateServer 模式session

  1. 確保在存儲會話狀態信息的遠程服務器上正在運行 ASP.NET 狀態服務。此服務隨 ASP.NET 一塊兒安裝,而且默認位於 <Drive>:\systemroot\Microsoft.NET\Framework\version\aspnet_state.exe。
  2. 在應用程序的 Web.config 文件中,設置 mode=StateServer 並設置 stateConnectionString 屬性。例如,stateConnectionString="tcpip=sarath:42424"。

使用 SQLServer 模式app

  1. 在運行 SQL Server 的計算機(將存儲會話狀態)上運行 InstallSqlState.sql(默認安裝在 <Drive>:\systemroot\Microsoft.NET\Framework\version 中)。它將使用新的存儲過程和 TempDB 數據庫中的 ASPStateTempApplications 和 ASPStateTempSessions 表建立一個稱爲 ASPState 的數據庫。
  2. 在應用程序的 Web.config 文件中,設置 mode=SQLServer 並設置 sqlConnectionString 屬性。例如,sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。

示例

如下示例指定了幾種會話狀態配置設置。less

<configuration>
   <system.web>
      <sessionState mode="InProc"
                    cookieless="true"
                    timeout="20"/>
      </sessionState>
   </system.web>
</configuration>
相關文章
相關標籤/搜索