久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

什么是Session分布式共享

 昵稱11935121 2018-03-19

在了解session分布式共享之前先來(lái)了解Session,、Redis和Nginx的相關(guān)知識(shí),。

一、Session相關(guān)知識(shí)

1,、Session 介紹

Session在網(wǎng)絡(luò)應(yīng)用中,,稱為“會(huì)話控制”。 每個(gè)用戶(瀏覽器)首次與web服務(wù)器建立連接時(shí),,就會(huì)產(chǎn)生一個(gè)Session,,同時(shí)服務(wù)器會(huì)分配一個(gè)SessionId給用戶的瀏覽器。我們可以用Fiddler查看cookies中,,會(huì)看到有一個(gè)SessionId的cookie,,大家都知道Http是無(wú)狀態(tài)請(qǐng)求,但是Session仿佛又讓Http請(qǐng)求變得有狀態(tài),,其核心就在于這個(gè)叫SessionId的cookie,,這個(gè)相當(dāng)于數(shù)據(jù)庫(kù)的Key,服務(wù)器那邊再有個(gè)Session內(nèi)容緩存表,,是不是Session的內(nèi)容就很容易得到了,。

什么是Session分布式共享

剛接觸程序開(kāi)發(fā)的人一定愛(ài)死Session了,因?yàn)镾ession讓Http從無(wú)狀態(tài)變成有狀態(tài)了,,頁(yè)面之間傳值,、用戶相關(guān)信息、一些不變的數(shù)據(jù),、甚至于查出來(lái)的DataTable也可以放進(jìn)去,,取值的時(shí)候只需要Session[Key]即可,真是方便極了,,但任何事物被封為利器基本也是雙刃劍,,Session的許多問(wèn)題我們不得不去面對(duì),。

什么是Session分布式共享

這個(gè)問(wèn)題很多人都遇到過(guò),Session是導(dǎo)致這個(gè)原因之一,,Session丟了讓用戶重新登錄,,解決方案為是把Session時(shí)間調(diào)到9999,結(jié)果該發(fā)生的還是繼續(xù)發(fā)生著,,Session照樣丟失,。

2、常見(jiàn)Session丟失原因

  • Session超時(shí),,用戶打開(kāi)頁(yè)面,,頁(yè)面長(zhǎng)時(shí)間不操作會(huì)導(dǎo)致此原因

  • IIS應(yīng)用程序池回收,或者重啟

  • Web.Config修改,,即IIS應(yīng)用程序池重啟

  • dll被替換或者動(dòng)態(tài)頁(yè)面修改,,即IIS應(yīng)用程序池重啟

  • 殺毒軟件對(duì).config文件進(jìn)行掃描,可能會(huì)導(dǎo)致IIS應(yīng)用程序池回收

  • 用戶瀏覽器禁用cookie

  • 其他原因

為什么說(shuō)其他原因呢,,好多程序員無(wú)法查明是什么原因?qū)е耂ession丟失,,但Session丟失我歸結(jié)為兩大類,一個(gè)是數(shù)據(jù)的Key丟了,,一個(gè)是Session內(nèi)容數(shù)據(jù)庫(kù)的丟了,,用戶瀏覽器禁用cookie一定是Key沒(méi)了。IIS應(yīng)用程序池回收必定會(huì)導(dǎo)致Session的內(nèi)容緩存表丟失,。

3,、解決Session丟失的方法

解決過(guò)Session丟失的都會(huì)用到這幾種方法:

  • InProc:將Session存到進(jìn)程內(nèi)。

  • StateServer:將Session存到獨(dú)立的狀態(tài)服務(wù)中(Asp.Net State Service),。

  • SqlServer:將Session存到SqlServer中,。

  • Cookieless:設(shè)置客戶端Session存儲(chǔ)的方式。

二,、Redis相關(guān)知識(shí)

1,、Redis介紹

Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò),、可基于內(nèi)存亦可持久化的日志型,、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API,。開(kāi)發(fā)人員用它解決了丟失問(wèn)題,,后來(lái)發(fā)現(xiàn)它還可以實(shí)現(xiàn)Session分布式共享,Session丟失,、以及持久化到SqlServer數(shù)據(jù)的性能問(wèn)題也隨之解決,。

2、RedisSessionProvider

首先通過(guò)nuget下載 RedisSessionProvider

什么是Session分布式共享

【web.config配置如下】

【Global.asax】

void Application_Start(object sender, EventArgs e) { StackExchange.Redis.ConfigurationOptions redisConfigOpts = StackExchange.Redis.ConfigurationOptions.Parse('192.168.8.138:6379'); RedisSessionProvider.Config.RedisConnectionConfig.GetSERedisServerConfig = (HttpContextBase context) => { return new KeyValuePair( 'DefaultConnection', redisConfigOpts); }; }

【存儲(chǔ)方法】

Session['Test'] = 'aa';

【調(diào)用方法】

string str = Session['Test'].ToString()

如果你配置好Redis,,并且做好上面這些配置,,運(yùn)行如果出現(xiàn)以下問(wèn)題,,請(qǐng)更新RedisSessionProvider的依賴包StackExchange.Redis到最新。

什么是Session分布式共享

3,、Redis下載與安裝

Redis下載:https://github.com/MSOpenTech/redis

什么是Session分布式共享

  • 修改Redis.windows.conf,,如果不修改,遠(yuǎn)程不能訪問(wèn)Redis

  • 將bind 127.0.0.1 改成了bind 0.0.0.0,。注意:進(jìn)入生產(chǎn)環(huán)境時(shí)候,,要啟用密碼,,否則會(huì)是Redis漏洞,,具體請(qǐng)自行百度

  • protected-mode yes 改成 protected-mode no

  • 詳細(xì)修改的傳送門(mén): redis開(kāi)啟遠(yuǎn)程訪問(wèn)

redis-server redis.windows.conf

什么是Session分布式共享

上圖為redis啟動(dòng)成功,默認(rèn)6379,,可以通過(guò)redis-cli進(jìn)行測(cè)試,,看別的機(jī)子能否訪問(wèn)。還可以在找個(gè)redis可視化工具看看里面存了啥,,也可以監(jiān)控Session是否持久化到Redis中了,。

運(yùn)行RedisSessionProvider這個(gè)項(xiàng)目。同一個(gè)IIS下,,同域名,,不同IP,同一瀏覽器,,不同端口一個(gè)是2459,,一個(gè)是2490。

什么是Session分布式共享

不同瀏覽器SessionId是不同的,。必須保證SessionId,,測(cè)試必須是同一個(gè)瀏覽器進(jìn)程分出的不同子標(biāo)簽才可以,這樣SessionId是共享的,。

什么是Session分布式共享

成功了就是這樣的拓?fù)鋱D:

什么是Session分布式共享

三,、Ngnix的相關(guān)知識(shí)

1、Ngnix安裝&下載

下載地址:http:///

2,、nginx.conf配置修改

什么是Session分布式共享

a,、接口修改

listen 80; 改成 listen 1100; 因?yàn)橐话愣急?0都被使用。

什么是Session分布式共享

b,、增加負(fù)載均衡】

upstream Jq_one { server 127.0.0.1:8770; server 192.168.8.138:7777; } server { ..... }

什么是Session分布式共享

c,、location節(jié)點(diǎn)修改

location / { root html; index index.aspx index.html index.htm; #其中jq_one 對(duì)應(yīng)著upstream設(shè)置的集群名稱 proxy_pass http://Jq_one; #設(shè)置主機(jī)頭和客戶端真實(shí)地址,以便服務(wù)器獲取客戶端真實(shí)IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

d,、Nginx啟動(dòng)命令

C:\server\nginx-1.0.2>start nginx或C:\server\nginx-1.0.2>nginx.exe

e,、Nginx重新載入命令

C:\server\nginx-1.0.2>nginx.exe -s reload

四、Session分布式共享

1,、拓?fù)鋱D

什么是Session分布式共享

通過(guò)Nginx+Redis實(shí)現(xiàn)對(duì)Session的分布式共享功能有二種方式:

2,、利用Nginx的Ip_Hash進(jìn)行Session分布式共享

使用nginx將同一ip的請(qǐng)求分配到固定服務(wù)器,,修改如下。ip_hash會(huì)計(jì)算ip對(duì)應(yīng)hash值,,然后分配到固定服務(wù)器

upstream Jq_one{ server 127.0.0.1:8770; server 192.168.8.138:7777;   ip_hash; }

效果可以理解為就是一個(gè)Ip,,通過(guò)Nginx路由到IIS_1上面,在多次請(qǐng)求,,會(huì)一直在IIS_1上,,不會(huì)路由到IIS_2上面。

什么是Session分布式共享

3,、利用MachineKey進(jìn)行Session分布式共享

Ip_Hash在一定程度上解決了Session分布式共享的問(wèn)題,,但是沒(méi)有發(fā)揮出nginx均衡負(fù)載的功能,繼續(xù)改進(jìn),。

a,、現(xiàn)將Ip_Hash去掉

去掉Ip_Hash重啟Nginx,打開(kāi)網(wǎng)站,,點(diǎn)擊設(shè)置Session按鈕,,結(jié)果報(bào)錯(cuò)

什么是Session分布式共享

b、往web.config添加MachineKey

【注意】負(fù)載均衡的兩個(gè)網(wǎng)站的MachineKey必須一樣,,否則出問(wèn)題,。

c、如下圖服務(wù)器的Ip在不斷變化,,而Session卻沒(méi)有丟失,,至此實(shí)現(xiàn)了Session分布式共享。

什么是Session分布式共享

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多