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
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
这样看看
mode="SQlServer"
stateConnectionString=tpip=你的sql服务器ip:42424"
sqlConnectionString="data source=1你的sql服务器ip;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
这个是监听的代码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、在web.config的system.webServer几点中添加<modules>
<add name="CrossDomainCookieModule" preCondition="managedHandler" type="WebLibrary.CrossDomainCookie, WebLibrary"/>
</modules>
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
}
}
127.0.0.1 www.test.com
127.0.0.1 one.test.com但是通过这2个域名都能登录,但就是不能实现session共享。