• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET中解决跨子域的Session共享

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文地址:http://www.itivy.com/ivy/archive/2011/4/24/634392360221984930.html

 

新建一个类库项目,添加以下类:

 

using System.Web; 
using System; 
using System.Configuration; 
using System.Diagnostics; 
using System.Reflection; 
using System.Web.SessionState;   

namespace WebLibrary 
{
     public class CrossDomainCookie : IHttpModule
     {
         private string m_RootDomain = string.Empty;

         #region IHttpModule Members
         public 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
     }
 } 

 

把它编译成dll。

然后在每个需要共享session的网站项目中做以下几件事情:

1、引用上面的dll

2、在web.config的appsetting节点中添加你的主站域名

<add key="RootDomain" value=".itivy.com"/> 


3、在web.config的system.web节点中添加

<httpModules>
    <add name="CrossDomainCookieModule" type="WebLibrary.CrossDomainCookie, WebLibrary"/> 
</httpModules>


 4、在web.config的system.web节点中修改session存储方式为stateserver

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


5、在web.config的system.webServer几点中添加

<modules>
    <add name="CrossDomainCookieModule" preCondition="managedHandler" type="WebLibrary.CrossDomainCookie, WebLibrary"/> 
</modules> 


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETMVC的WebApi的实练发布时间:2022-07-10
下一篇:
.NET/ASP.NETMVC(模块化开发AraeRegistration)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap