自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

nginx負(fù)載均衡,多站點(diǎn)共享Session

運(yùn)維 系統(tǒng)運(yùn)維
多站點(diǎn)共享Session有很多方法,本文將演練一下以數(shù)據(jù)庫的形式存儲Session,來實(shí)現(xiàn)多站點(diǎn)共享Session。

  多站點(diǎn)共享Session常見的做法有:

  • 使用.net自動的狀態(tài)服務(wù)(Asp.net State Service);
  • 使用.net的Session數(shù)據(jù)庫;
  • 使用Memcached。
  • 使用Cookie方式實(shí)現(xiàn)多個站點(diǎn)間的共享(這種方式只限于幾個站點(diǎn)都在同一域名的情況下);

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

  首先我們建好一下站點(diǎn),如下圖:

 

Default.aspx

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

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

  具體代碼如下:

 

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

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

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

  1.增加machineKey 主要作用是:

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

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

  具體配置如下:

  1. <machineKey validationKey="86B6275BA31D3D713E41388692FCA68F7D20269411345AA1C17A7386DACC9C46E7CE5F97F556F3CF0A07159659E2706B77731779D2DA4B53BC47BFFD4FD48A54" 
  2.                 decryptionKey="9421E53E196BB56DB11B9C25197A2AD470638EFBC604AC74CD29DBBCF79D6046" 
  3.  
  4.    validation="SHA1" decryption="AES"/>   
  5.  
  6.  <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ù)庫實(shí)例名稱. 可以用"."表示本機(jī).

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

  表示用戶名和密碼.

  -E參數(shù):

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

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

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

  sstype 參數(shù)說明:

  我的設(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ù)了,我們再點(diǎn)一下 “SetSession”來設(shè)置一下一個 會話值,

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

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

  ASPStateTempSessions 這個表中的 一個SessionID ,

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

  1. ALTER PROCEDURE [dbo].[TempGetAppID]  
  2.  
  3.     @appName    tAppName,  
  4.  
  5.     @appId      int OUTPUT  
  6.  
  7.     AS  
  8.  
  9.     SET @appName = 'Test' --LOWER(@appName) 修改這里,使多個站點(diǎn)的APPname ,為一個固定值。  
  10.  
  11.     SET @appId = NULL 
  12.  
  13.    
  14.  
  15.     SELECT @appId = AppId 
  16.  
  17.     FROM [AWBUISession].dbo.ASPStateTempApplications  
  18.  
  19.     WHERE AppName = @appName   
  20.  
  21.     IF @appId IS NULL BEGIN  
  22.  
  23.         BEGIN TRAN    
  24.  
  25.         SELECT @appId = AppId 
  26.  
  27.         FROM [AWBUISession].dbo.ASPStateTempApplications WITH (TABLOCKX)  
  28.  
  29.         WHERE AppName = @appName         
  30.  
  31.         IF @appId IS NULL  
  32.  
  33.         BEGIN  
  34.  
  35.             EXEC GetHashCode @appName, @appId OUTPUT             
  36.  
  37.             INSERT [AWBUISession].dbo.ASPStateTempApplications  
  38.  
  39.             VALUES  
  40.  
  41.             (@appId, @appName)             
  42.  
  43.             IF @@ERROR = 2627 
  44.  
  45.             BEGIN  
  46.  
  47.                 DECLARE @dupApp tAppName             
  48.  
  49.                 SELECT @dupApp = RTRIM(AppName)  
  50.  
  51.                 FROM [AWBUISession].dbo.ASPStateTempApplications  
  52.  
  53.                 WHERE AppId = @appId  
  54.  
  55.                 RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',  
  56.  
  57.                             18, 1, @appName, @dupApp)  
  58.  
  59.             END  
  60.  
  61.         END  
  62.  
  63.         COMMIT  
  64.  
  65.     END  
  66.  
  67.     RETURN 0                         

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

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

  點(diǎn) “SetSession”,

  再點(diǎn):“GetSession” ,

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

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

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

責(zé)任編輯:黃丹 來源: cnblogs.com
相關(guān)推薦

2010-03-24 10:35:02

Nginx負(fù)載均衡器

2013-04-22 11:29:14

Nginx

2012-07-31 09:25:42

nginx負(fù)載均衡反向代理

2017-12-13 15:33:02

LinuxNginxTomcat

2010-05-06 15:24:35

Tomcat負(fù)載均衡

2011-12-02 22:51:46

Nginx負(fù)載均衡

2010-05-05 22:51:24

2010-05-06 10:01:26

nginx負(fù)載均衡

2011-09-01 10:23:47

Nginx負(fù)載均衡器負(fù)載均衡

2011-01-07 11:14:17

Nginx負(fù)載均衡負(fù)載均衡

2010-05-07 12:23:23

nginx負(fù)載均衡

2014-07-28 11:37:49

NginxTomcat

2019-09-18 10:39:08

負(fù)載均衡反向代理TCP

2024-11-11 09:51:46

Nginx部署負(fù)載

2017-11-09 10:42:11

Nginx負(fù)載均衡策略

2010-03-25 18:52:15

Nginx負(fù)載均衡

2010-05-07 12:27:53

nginx負(fù)載均衡

2017-12-18 12:04:02

Nginx代理均衡

2019-06-24 15:58:53

TCPUDPNginx

2019-11-04 15:35:53

Nginx反向代理負(fù)載均衡
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號