Session 共享(StateServer模式)(原创)
2013-08-16 14:28
330 查看
Session 共享要注意两点:
1、必须在同一个域名下
2、StateServer模式是把session保存在同一台服务器上的进程:aspnet_state.exe里面,当然也可以保存在memcache和数据库里,这个下一节再讲。
web.config设置:
tcpid的42424是默认端口
统一sessionid
要想共享session,就得把sessionid统一,sessionid是保存在cookie里ASP.NET_SessionId
这样就可以实现session共享了。
1、必须在同一个域名下
2、StateServer模式是把session保存在同一台服务器上的进程:aspnet_state.exe里面,当然也可以保存在memcache和数据库里,这个下一节再讲。
web.config设置:
<machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/> <sessionState cookieless="false" timeout="50" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/> <httpModules> <add name="CrossDomainCookieModule" type="Entity.SessionProviderHttpModule, Entity"/> </httpModules>
tcpid的42424是默认端口
统一sessionid
要想共享session,就得把sessionid统一,sessionid是保存在cookie里ASP.NET_SessionId
public class SessionProviderHttpModule : IHttpModule { private string m_RootDomain = string.Empty; public void Dispose() { } public void Init(HttpApplication context) { Sites sites = new Sites(); m_RootDomain = sites.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; } } } } }
这样就可以实现session共享了。
相关文章推荐
- 负载均衡时,在State_Server模式中的Session共享问题(不讨论负载均衡的问题)
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- asp.net基于StateServer的二级域名共享session
- c# Session 的StateServer模式代替InProc模式
- State Server实现多机器多站点 Session 共享 全手记
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- 利用StateServer实现Session共享
- ASP.NET 负载均衡 StateServer Session共享问题(经验记录)
- Asp.Net StateServer实现共同域名下Session共享
- 说说Asp.net的StateServer和Session共享
- 负载均衡、单点登录环境中Session StateServer模式下Session丢失问题排错步骤
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- Aspnet,Aspnet MVC sessionState StateServer 多IIS共享StateServer
- asp.net session共享(通过StateServer方式)
- Session 共享(Custom模式)By Memcached(原创)
- State Server实现多机器多站点 Session 共享 全手记
- ASP.NET 使用mode=”InProc”方式保存Session老是丢失,无奈改成StateServer 模式。
- asp.net session共享(通过StateServer方式)