欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2013年10月24日 15:18:25   作者:  
這篇文章介紹了ASP.NET中在不同的子域中共享Session的具體方法,有需要的朋友可以參考一下

今天遇到了這個問題,于是研究了一下。要解決這個問題,首先就要明白一些Session的機理。Session在服務器是以散列表形式存在的,我們都知道Session是會話級的,每個用戶訪問都會生成一個Session。那么服務器是怎么區(qū)分不同用戶的Session?又是怎么將不同用戶的Session與不同的用戶綁定的呢?下面我們來研究一下,以下純屬我個人的理解,如有錯誤請指證。

Session在服務器端是以散列表的形式存在的,區(qū)分每一個Session是通過SessionID來實現(xiàn)的,所以可以說這個SessionID是一個Key是一個全局唯一的值。我們可以通過ASP.NET來打印出SessionID,如下代碼:

復制代碼 代碼如下:

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

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

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

知道了這個原理,我們的問題也就有眉頭了,即然是用Cookies來保存SessionID,那么我們就可以在Cooikes上做手腳了。我們都知道Cooikes記錄方式是以域(例如:http://www.dbjr.com.cn/)為區(qū)分的,這也是各種瀏覽器規(guī)定的。如果不這么做,安全性就會有問題。我們要做的就是讓指定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等等。有了這個認識,我想大家心里也有數(shù)了,該怎么怎么做,但是現(xiàn)在問題是用來生成SessionID的方法是ASP.NET自動實現(xiàn)的,我們又怎么去干涉它呢?這是這樣做的,不主動干涉它,但是我可以操作它的Cookies啊。接下來我們就研究ASP.NET存SessionID的Cooike的名字是什么。經(jīng)過網(wǎng)上很容易就查找到了,名字是: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,這樣就可以實現(xiàn)跨子域的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" />

這樣,就完全實現(xiàn)了不同子域的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 Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務使用

    ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務使用

    這篇文章介紹了ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務使用的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • asp.net實現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法

    asp.net實現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法

    這篇文章主要介紹了asp.net實現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法,結合實例形式分析了asp.net針對xml文件操作及DropDownList控件的使用技巧,需要的朋友可以參考下
    2017-02-02
  • ASP.NET中Global和URLReWrite用法

    ASP.NET中Global和URLReWrite用法

    這篇文章主要介紹了ASP.NET中Global和URLReWrite用法,較為深入淺出的分析了Global.asax的功能及配置技巧,并實例分析了URLReWrite實現(xiàn)偽靜態(tài)的方法,需要的朋友可以參考下
    2015-06-06
  • Nlog日志框架集成Seq擴展包

    Nlog日志框架集成Seq擴展包

    這篇文章介紹了Nlog日志框架集成Seq擴展包的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • ASP.NET頁面之間傳值的方式之Application實例詳解

    ASP.NET頁面之間傳值的方式之Application實例詳解

    這篇文章主要介紹了ASP.NET頁面之間傳值的方式之Application實例詳解,需要的朋友可以參考下
    2017-10-10
  • HttpRequest的QueryString屬性 的一點認識

    HttpRequest的QueryString屬性 的一點認識

    我們開發(fā)asp.net程序獲取QueryString時,經(jīng)常性的遇到一些url編碼問題
    2012-11-11
  • .NET性能調(diào)優(yōu)之一:ANTS Performance Profiler的使用介紹

    .NET性能調(diào)優(yōu)之一:ANTS Performance Profiler的使用介紹

    本系列文章主要會介紹一些.NET性能調(diào)優(yōu)的工具、Web性能優(yōu)化的規(guī)則(如YSlow)及方法等等內(nèi)容。成文前最不希望看到的就是園子里不間斷的“哪個語言好,哪個語言性能高”的爭論,不多說,真正的明白人都應該知道這樣的爭論有沒有意義,希望我們能從實際性能優(yōu)化的角度去討論問題
    2013-01-01
  • 圖析ASP.NET Core引入gRPC服務模板

    圖析ASP.NET Core引入gRPC服務模板

    這篇文章主要介紹了圖析ASP.NET Core引入gRPC服務模板的過程,目的就是使記錄盡可能的詳細,盡可能用通俗易懂的語言來進行描述,讓大家能用起來。在asp.net core3.0中把grpc服務作為第一等公民進行支持,所以有需要的朋友可以了解下
    2019-04-04
  • Asp.net?core?使用SignalR推送消息過程詳解

    Asp.net?core?使用SignalR推送消息過程詳解

    ASP.NET?Core?SignalR?是一個開放源代碼庫,可用于簡化向應用添加實時?Web?功能。?實時?Web?功能使服務器端代碼能夠?qū)?nèi)容推送到客戶端,本文重點給大家介紹Asp.net?core?使用SignalR推送消息,感興趣的朋友一起看看吧
    2022-03-03
  • .NET?Core支持Cookie和JWT混合認證、授權的方法

    .NET?Core支持Cookie和JWT混合認證、授權的方法

    這篇文章主要介紹了.NET?Core如何支持Cookie和JWT混合認證、授權,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論