日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁西西教程其它教程 → nginx 負(fù)載均衡、用數(shù)據(jù)庫存儲Session,來實現(xiàn)多站點共享Session

      nginx 負(fù)載均衡、用數(shù)據(jù)庫存儲Session,來實現(xiàn)多站點共享Session

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:百度搜索時間:2012/11/5 18:07:00字體大。A-A+

      作者:西西點擊:1次評論:0次標(biāo)簽: Session

      • 類型:遠(yuǎn)程監(jiān)控大小:4.6M語言:中文 評分:5.6
      • 標(biāo)簽:
      立即下載

      多站點共享Session常見的作法有:

      1、使用.net自動的狀態(tài)服務(wù)(Asp.net State Service);

      2、使用.net的Session數(shù)據(jù)庫;

      3、使用Memcached。

      4、使用Cookie方式實現(xiàn)多個站點間的共享(這種方式只限于幾個站點都在同一域名的情況下); 

      這里我們就 演練一下 以數(shù)據(jù)庫的形來存儲Session,來實現(xiàn)多站點共享Session。 

      首先我們 建好一下站點,如下圖: 

       

      Default.aspx 

      其中 有二個Button  ,SetSession 主要是用于給一個 Session 賦值(如:Session["ShareValue"] = “abcd”

      ) ,

      GetSession 主要就是獲得 一個 Session 值。

      具體代碼如下:

        

       代碼部分就這么多就行了…

      下面就是要配置一下 Web.config了 , 其實主要就是在 <system.web>

       這個節(jié)點中 增加 machineKey 及 sessionState 這兩個節(jié)點,

      1.增加machineKey 主要作用是:

      “按照MSDN的標(biāo)準(zhǔn)說法:“對密鑰進(jìn)行配置,以便將其用于對 Forms 身份驗證 Cookie 數(shù)據(jù)和視圖狀態(tài)數(shù)據(jù)進(jìn)行加密和解密,并將其用于對進(jìn)程外會話狀態(tài)標(biāo)識進(jìn)行驗證!币簿褪钦fAsp.Net的很多加密,都是依賴于machineKey里面的值,例如Forms 身份驗證 Cookie、ViewState的加密。默認(rèn)情況下,Asp.Net的配置是自己動態(tài)生成,如果單臺服務(wù)器當(dāng)然沒問題,但是如果多臺服務(wù)器負(fù)載均衡,machineKey還采用動態(tài)生成的方式,每臺服務(wù)器上的machinekey值不一致,就導(dǎo)致加密出來的結(jié)果也不一致,不能共享驗證和ViewState,所以對于多臺服務(wù)器負(fù)載均衡的情況,一定要在每臺站點配置相同的machineKey! ,具體可以查一下其它資料。

      2.增加 sessionState 主要是讓 Session 保存在數(shù)據(jù)庫中。 

      具體配置如下:

      <machineKey validationKey="86B6275BA31D3D713E41388692FCA68F7D20269411345AA1C17A7386DACC9C46E7CE5F97F556F3CF0A07159659E2706B77731779D2DA4B53BC47BFFD4FD48A54"

                      decryptionKey="9421E53E196BB56DB11B9C25197A2AD470638EFBC604AC74CD29DBBCF79D6046"

         validation="SHA1" decryption="AES"/> 

       <sessionState mode="SQLServer" sqlConnectionString="Data Source=PC-07195;Initial Catalog=AWBUISession;Persist Security Info=True;User ID=jins;Password=js@#$1234" allowCustomSqlDatabase="true" cookieless="false" timeout="100"/>

      網(wǎng)站部分 這樣就好了。。。 下面就是要配置據(jù)庫了….. 

      數(shù)據(jù)庫配置:

      使用aspnet_regsql.exe工具

      ASP.NET 2.0版本后微軟提供了aspnet_regsql.exe工具可以方便的配置Session數(shù)據(jù)庫.該工具位于 Web 服務(wù)器上的"系統(tǒng)根目錄\Microsoft.NET\Framework\版本號"文件夾中.

      使用舉例:

      aspnet_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p

      -S參數(shù):

      表示數(shù)據(jù)庫實例名稱. 可以用"."表示本機(jī).

      -U和-P參數(shù):

      表示用戶名和密碼.

      -E參數(shù):

      可以再-U –P 與 -E中選擇一組. –E表示以當(dāng)前系統(tǒng)用戶通過windows身份驗證登錄數(shù)據(jù)庫, -U -P則是使用SqlServer用戶登錄數(shù)據(jù)庫.

      -ssadd / –ssremove 參數(shù):

      -ssadd表示是添加Session數(shù)據(jù)庫, -ssremove表示移除Session數(shù)據(jù)庫.

      sstype 參數(shù)說明:

      PSE: collapse; BACKGROUND-COLOR: rgb(245,245,245); TEXT-ALIGN: left; orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px; border-spacing: 0px" cellspacing="0" cellpadding="0" border="1">
      t將會話數(shù)據(jù)存儲到 sql server tempdb 數(shù)據(jù)庫中。這是默認(rèn)設(shè)置。如果將會話數(shù)據(jù)存儲到 tempdb 數(shù)據(jù)庫中,則在重新啟動 SQL Server 時將丟失會話數(shù)據(jù)。
      p將會話數(shù)據(jù)存儲到 ASPState 數(shù)據(jù)庫中,而不是存儲到 tempdb 數(shù)據(jù)庫中。
      c將會話數(shù)據(jù)存儲到自定義數(shù)據(jù)庫中。如果指定 c 選項,則還必須使用 -d 選項包括自定義數(shù)據(jù)庫的名稱。

      我的設(shè)置是:aspnet_regsql.exe -S . - E -d AWBUISession -ssadd -sstype c 

      好了;镜 我們就已經(jīng)搞定了。。 

      現(xiàn)在 我們分別把我們剛建的一個網(wǎng)站 部署 到 IIS 中。不過我們既然要負(fù)載。至少也的部署兩份。

       

      我們把 其中一個 服務(wù)器中的 defaut.aspx 中 “服務(wù)器 1” 改成 “服務(wù)器 2” ,這樣做的主要目地是 做一下 區(qū)別! 

      具體如下:

       

      兩個網(wǎng)站的 URL分別是:

       server 1:127.0.0.1:8081;

      server 2:127.0.0.1:8080;   

      OK。下面我們就是 配置 Nignx了。

      首先 在 nginx\conf 配置  文件中找到 nginx.conf 這個文件 ,就記事本打開, 

       

      做如上的 設(shè)置:

      OK。  nginx  這樣配置 就算OK 了。 我們啟動一下 nginx ..

      在瀏覽器中 輸入我們 在 nginx 中配置的 URL 如:127.0.0.1:8090 

       

      我們會看到 服務(wù)器 1 已經(jīng)開始為我們服務(wù)了,我們再點一下 “SetSession”來設(shè)置一下一個 會話值,

      我們會看到 服務(wù)器 2 開始 工作。這時我們再點一下 “GetSesion”看一下 剛才在 服務(wù)器 1 設(shè)置 的會話值,結(jié)果如下 : 

      出現(xiàn)這種情況 ,主要就是在數(shù)據(jù)庫中存儲 一個會話時 沒有做到 服務(wù)器1 和服務(wù)2的Session 共享,主要是 在 

      ASPStateTempSessions 這個表中的 一個SessionID ,

      其中的SessionId包括兩個部分:網(wǎng)站生成的24位SessionID及8位AppName對于不同的站點,其AppName不同,在能夠在不同站點下使24位SessionID相同的情況下,要保證經(jīng)過組合加上AppName后的SessionID相同,可以通過修改存儲過程TempGetAppID,使其得到的SessionID與AppName無關(guān),修改TempGetAppID如下:

      ALTER PROCEDURE [dbo].[TempGetAppID]

          @appName    tAppName,

          @appId      int OUTPUT

          AS

          SET @appName = 'test' --LOWER(@appName) 修改這里,使多個站點的APPname ,為一個固定值。

          SET @appId = NULL

          SELECT @appId = AppId

          FROM [AWBUISession].dbo.ASPStateTempApplications

          WHERE AppName = @appName 

          IF @appId IS NULL BEGIN

              BEGIN TRAN  

              SELECT @appId = AppId

              FROM [AWBUISession].dbo.ASPStateTempApplications WITH (TABLOCKX)

              WHERE AppName = @appName       

              IF @appId IS NULL

              BEGIN

                  EXEC GetHashCode @appName, @appId OUTPUT           

                  INSERT [AWBUISession].dbo.ASPStateTempApplications

                  VALUES

                  (@appId, @appName)           

                  IF @@ERROR = 2627

                  BEGIN

                      DECLARE @dupApp tAppName           

                      SELECT @dupApp = RTRIM(AppName)

                      FROM [AWBUISession].dbo.ASPStateTempApplications

                      WHERE AppId = @appId

                      RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',

                                  18, 1, @appName, @dupApp)

                  END

              END

              COMMIT

          END

          RETURN 0                        

      經(jīng)過以上修改之后,下面要實現(xiàn)多個站點共用同一個SessionID.

      重啟一下各站點。再在瀏覽一下網(wǎng)站 

      點 “SetSession”, 

      再點:“GetSession” 

      這樣 我們就看到 服務(wù)器2 給出了我們 剛才在 服務(wù)器 1 中設(shè)置 的會話值了。

      我們 再點:“GetSession”, 

      可以看到  服務(wù)器1 和服務(wù)器 2 返回的是相同的結(jié)果,達(dá)到了 “多站點共享Session”

       附加一點: Session 過期刪除,主要是 在 SQL server 代理中的  作業(yè)完成。

      具體的可以,查一下其它相關(guān)資料.

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)