91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中在不同子域中共享Session的具體方法

發布時間:2021-09-16 23:24:24 來源:億速云 閱讀:131 作者:chen 欄目:開發技術

本篇內容主要講解“ASP.NET中在不同子域中共享Session的具體方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ASP.NET中在不同子域中共享Session的具體方法”吧!

復制代碼 代碼如下:


protected void Page_Load(object sender, EventArgs e)      
{            
Response.Write(Session.SessionID.ToString());     
}

這樣我們就得到了這樣的值:0julmoedn0kz3gyfnr1vksv0,有點像是GUID,就算不是算法也都是類似的,主要就是為了保證全局唯一性。這樣就達到了區分不同用戶的Session的目的。接下來還有第二個問題,那就是SessionID有了,但是它又是怎么和相應的訪問者(用戶)綁定的呢?比如說用戶A訪問維護了自己的SessionID,用戶B訪問也維護了自己的SessionID。我們都知道web是基于http無鏈接的,他們又是怎么做到的呢?沒錯,答案就是在客戶端存儲了自己的SessionID。瀏覽器存儲SessionID有兩種方式,一種就是利用Cookies;還有一種就是利用url參數(這種我們不常用,很不友好)。

話題說到Cookies上來了,怎么的?沒想到Session和Cookies還有這樣的關系吧?(很多人知道,別BS我)沒錯,當我們請求一個URL時候,服務器會生成一個全局的SessionID,并且把這個值以Cookies的形式保存在客戶端也就是瀏覽器(這里暫不討論url方式)。這樣當用戶再去請求的時候,在http頭把這個SessionID的Cookie發到服務器端,服務器就去找這個SessionID,如果找到了。就證明這個用戶的狀態是存在的。

知道了這個原理,我們的問題也就有眉頭了,即然是用Cookies來保存SessionID,那么我們就可以在Cooikes上做手腳了。我們都知道Cooikes記錄方式是以域(例如:https://www.jb51.net/)為區分的,這也是各種瀏覽器規定的。如果不這么做,安全性就會有問題。我們要做的就是讓指定Cookies的父域方式,不指定具體指域,這樣Cookies就可以跨子域了。Cookies可以像這樣指定域:

復制代碼 代碼如下:


protected void Page_Load(object sender, EventArgs e)       
{            
Response.Cookies["MyCook"].Domain = ".jb51.net";   
}

  這樣,我們所有的二級域全部是認這一個主域的,比如a.jb51.net;b.jb51.net;user.jb51.net等等。有了這個認識,我想大家心里也有數了,該怎么怎么做,但是現在問題是用來生成SessionID的方法是ASP.NET自動實現的,我們又怎么去干涉它呢?這是這樣做的,不主動干涉它,但是我可以操作它的Cookies啊。接下來我們就研究ASP.NET存SessionID的Cooike的名字是什么。經過網上很容易就查找到了,名字是:ASP.NET_SessionId,這個就是SessionId的Cookies名字。我們可以在Session_Start中這樣寫:

復制代碼 代碼如下:


protected void Session_Start(object sender, EventArgs e)      
{           

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID.ToString();  

Response.Cookies["ASP.NET_SessionId"].Domain = ".jb51.net";     

}

代碼的意思是每次會話開始的時候,我都把ASP.NET_SessionId這個Cookie重寫成我們已有的SessionID,并且把這個Cookie的domain指定為父域,比如:.jb51.net,這樣就可以實現跨子域的Session共享了。怎么樣很簡單吧?

我們還有一個外題問題,就是客戶端保存的問題解決了,但是服務器端的Session怎么辦?一般情況下我們不同的子域做的是指向不同的服務器的,比如user.jb51.net 專門一臺服務器,yellow.jb51.net專門一臺服務器。這時它們別說是進程了,連物理上都不是一個了。Session怎么共享?這時就用到另一個方法了,我們默認的Session是存儲在asp.net進程中的,這樣沒法互相訪問,如下面所示:

復制代碼 代碼如下:


<sessionState mode="InProc" />

我們可以修改為State Server方式,這是一個單獨的服務可以用來存儲ASP.NET Session的,它支持分布式遠程主機的,這樣我們可以用一臺服務器來提供Session服務,如下所示:

復制代碼 代碼如下:


<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="30" />

這樣,就完全實現了不同子域的Session共享了。

前面說到Url保存SessionId的方式,由于不常用,給大家演示一下,如下配置就可以了:

復制代碼 代碼如下:


<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="30" cookieless="true" />

cookieless屬性指定是否用cookie來保存SessionId,我們運行一下得到下面的樣子:

http://localhost:3380/(S(dqxcs455n4u2vg55ia51fvqg))/default.aspx

到此,相信大家對“ASP.NET中在不同子域中共享Session的具體方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 大安市| 江油市| 宿松县| 云浮市| 镶黄旗| 贵定县| 六安市| 镇康县| 怀化市| 陈巴尔虎旗| 叙永县| 西乡县| 勃利县| 潼南县| 东乡族自治县| 元阳县| 长阳| 庄河市| 讷河市| 祁门县| 九江县| 富锦市| 濮阳县| 白山市| 元氏县| 汉沽区| 泾川县| 兴义市| 莲花县| 临江市| 合作市| 富源县| 原阳县| 栾城县| 宁明县| 巴中市| 太谷县| 封开县| 印江| 郧西县|