1、在单台电脑上建dns服务,然后添加虚拟域名,www.test.com、one.test.com
2、接着在iis中创建2个站点,主机头分别是www.test.com、one.test.com,端口均为80
3、拷贝相同2份代码到这2个站点目录下
===================2个站点web.config设置相同:
1、<add key="RootDomain" value=".test.com"/>
2、<add name="MakeSessionIDOneOnly" type="SessionShare.MakeSessionIDOneOnly, SessionShare"/>
3、<machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>
4、<sessionState cookieless="false" timeout="50" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>这些都是是从网上摘的,运行时2个网站session不能共享,请问问题出在哪里?是否是虚拟域名设置的有问题,还是其他问题?谢谢!C# StateServer sessioniis

解决方案 »

  1.   

    <add key="RootDomain" value="test.com"/>
    这样看看
      

  2.   

    <sessionState 
                mode="SQlServer"
                stateConnectionString=tpip=你的sql服务器ip:42424"
                sqlConnectionString="data source=1你的sql服务器ip;Trusted_Connection=yes"
                cookieless="false" 
                timeout="20" 
        />
      

  3.   

    http://flycantus.cnblogs.com/怎么我看人家的和你的不一样呢?
      

  4.   


    这个是监听的代码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
         }
     } 以上代码读取了
    appsetting下的<add key="RootDomain" value=".itivy.com"/> 2\在web.config中添加监听(1的代码),WebLibrary(命名空间).CrossDomainCookie(类)
    <httpModules>
        <add name="CrossDomainCookieModule" type="WebLibrary.CrossDomainCookie, WebLibrary"/> 
    </httpModules>...
      

  5.   


    比较了一下就是缺少了下面这个,其他都一样
    5、在web.config的system.webServer几点中添加<modules>
        <add name="CrossDomainCookieModule" preCondition="managedHandler" type="WebLibrary.CrossDomainCookie, WebLibrary"/> 
    </modules> 
      

  6.   

    以下监听代码是网上摘的,和你提供的命名不同,形式都是一样的
    namespace SessionShare
    {
        public class MakeSessionIDOneOnly : 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++)
                {
                    if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")
                    {
                        app.Context.Response.Cookies[i].Domain = m_RootDomain;
                    }
                }
            }        #endregion
        }
    }
      

  7.   

    大侠们,还有什么要注意的吗?目前我没用dns服务器设置虚拟域名,而是改用在“C:\WINDOWS\system32\drivers\etc\hosts”中加2条记录
    127.0.0.1       www.test.com
    127.0.0.1       one.test.com但是通过这2个域名都能登录,但就是不能实现session共享。