利用StateServer實現Session共享
1、更改web.config 中的 <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" cookieless="false"/>
注:tcpip=localhost:42424 tcpip的值可以設定為遠端電腦的ip,如果設定為localhost說明session的值存放在本地伺服器上面,如果設定為遠端ip的話,則session存放在該遠端伺服器上。
2、開啟session所在伺服器的“服務”設定,將“aspnet_state”服務開啟,將其設定為自動啟動模式
3、如果session所在的伺服器不是本地伺服器,需要在session所在伺服器的註冊器中將允許遠端訪問設定開啟,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 節點 → 將 AllowRemoteConnection 的鍵值設定成“1”(1 為允許遠端電腦的連線,0 代表禁止)→ 設定 Port (埠號)
4、在Global.asax程式碼中修改Session_Start()方法,如下:
protected void Session_Start()
{
foreach (string moduleName in this.Modules)
{
string appName = "appName"; //一定要保持不同應用程式中的appName的值一致
IHttpModule module = this.Modules[moduleName];
SessionStateModule ssm = module as SessionStateModule;
if (ssm != null)
{
FieldInfo storeInfo = typeof(SessionStateModule).GetField("_store", BindingFlags.Instance | BindingFlags.NonPublic);
SessionStateStoreProviderBase store = (SessionStateStoreProviderBase)storeInfo.GetValue(ssm);
if (store == null)//In IIS7 Integrated mode, module.Init() is called later
{
FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, appName);
}
else
{
Type storeType = store.GetType();
if (storeType.Name.Equals("OutOfProcSessionStateStore"))
{
FieldInfo uribaseInfo = storeType.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
uribaseInfo.SetValue(storeType, appName);
}
}
}
}
if (Response.Cookies != null)
{
for (int i = 0; i < Response.Cookies.Count; i++)
{
if (Response.Cookies[i].Name == "ASP.NET_SessionId")
{
Response.Cookies[i].Domain = ".test.com"; //一定要保持不同應用程式的"ASP.NET_SessionId"的cookie的Domain值一致
}
}
}
}
注意:上面的程式碼一定要寫在Global.asax中的Session_Start()方法中才會起作用,我看到的別人的部落格中的程式碼是寫在Init()方法中,但是我測試發現沒辦法實現session共享,此處給出我借鑑的部落格的地址http://www.cnblogs.com/cnxkey/articles/5157498.html