日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET二级域名共享Session

發(fā)布時間:2023/12/19 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET二级域名共享Session 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ASP.NET二級域名站點共享Session狀態(tài)今天, 我要寫的是如何在二級域名站點之間,主站點和二級域名站點之間共享Session。首先, Session要共享,站點之間SessionID必須要一致,那怎么保證SessionID一致呢?ASP.NET中的SessionID是存儲在客戶端的cookie之中鍵值為ASP.NET_SessionId用來維護(hù)瀏覽者Session對應(yīng)關(guān)系的一個字符串,要想在二級域名站點之間,主站點和二級域名站點共享SessionID就必須先共享,那么我們就必須先實現(xiàn)ASP.NET_SessionId這一cookie的共享。A: CrossDomainCookieModule------------------------------------------------------------------------------------------------public class CrossDomainCookie : IHttpModule{private string m_RootDomain = string.Empty;#region IHttpModule Memberspublic void Dispose(){}public void Init(HttpApplication context){m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];context.EndRequest += new System.EventHandler(context_EndRequest);}void context_EndRequest(object sender, System.EventArgs e){HttpApplication app = sender as HttpApplication;for (int i = 0; i < app.Context.Response.Cookies.Count; i++){app.Context.Response.Cookies[i].Domain = m_RootDomain;}}#endregion}上面的Module重設(shè)了所有cookie的domain到root domain, root domain在web.config中設(shè)置。也許有人會說這是眉毛胡子一把抓重寫了所有cookie的domain, 那他也可以判斷一下cookie的name, 如果為ASP.NET_SessionId的話才重寫。如果主站點和二級域名站點是同一站點,那么做到這一步,你的session就已經(jīng)共享了,因為Session的ID是相同的,而且Session容器也是同一個。如果主站點和二級域名站點是兩個不同站點,則需要進(jìn)行更多的操作了。如果兩個站點是不同的服務(wù)器的話,解決方法要簡單點:1) 使用相同的state server來存儲Session.2) 在兩個站點的web.config設(shè)置相同的machineKey.<machineKeyvalidationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4"decryptionKey="5FC88DFC24EA123C"validation="SHA1"/>MachineKey的設(shè)置請參考http://msdn.microsoft.com/zh-cn/asp.net/w8h3skw9.aspx3) 給兩個站點設(shè)置相同name這樣做是為了確保兩個站點的siteID相同,siteID是site name的hash值,注意請不要使用默認(rèn)站點,因為默認(rèn)站點的siteID并非site name的hash.如果兩個站點是在同一的服務(wù)器的話,需要對CrossDomainCookie再作一下修改,此方法也可應(yīng)用于兩個站點在不同服務(wù)器的情況:1) 使用相同的state server來存儲Session.2) 用反射來設(shè)置System.Web.SessionState.OutOfProcSessionStateStore的靜態(tài)字段s_uribase的值public class CrossDomainCookie : IHttpModule{private string m_RootDomain = string.Empty;#region IHttpModule Memberspublic void Dispose(){}public void Init(HttpApplication context){m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);if (uriField == null)throw new ArgumentException("UriField was not found");uriField.SetValue(null, m_RootDomain);context.EndRequest += new System.EventHandler(context_EndRequest);}void context_EndRequest(object sender, System.EventArgs e){HttpApplication app = sender as HttpApplication;for (int i = 0; i < app.Context.Response.Cookies.Count; i++){app.Context.Response.Cookies[i].Domain = m_RootDomain;}}#endregion}完成這樣的修改之后就可以實現(xiàn)Session的共享了。同樣如果你是使用SQL server來存儲Session, 也可以使用類似的方法來解決Session共享問題。來源:Diy綜合信息網(wǎng).NET二級域名共享Session

?

總結(jié)

以上是生活随笔為你收集整理的.NET二级域名共享Session的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。