为什么还是那句话,在网上找了N篇Session共享,但真正可以直接解决问题的还是没有找到。

一、以下为本人亲测,为防止环境不一致,对本文产生歧义,限定环境如下:

1. IIS7.0

2. Asp.net 的站点

3. StateServer模式,数据库及自定义配置不在本文讨论范围。

4. 192.168.1.41 (主站点服务器,域名:www.xxx.com)  ,192.168.1.43 (业务分发服务器 域名:BDN1.xxx.com)

5. 实现的跨域也只是跨子域的方法。(因为最终都是读取根域下的Cookie来读取SessonID共享的)

二、配置

主站点服务器web.config

1. <sessionState mode="StateServer" stateConnectionString="tcpip=192.168.1.41:42424" timeout="60"/>

将模式改为 StateServer ,默认是关闭远程访问,需要打开注册表(regedit),HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters 

将AllowRemoteConnection 改为 1 可以使用Telnet 192.168.1.41 42424 测试一下是否已经打开。

2. <httpCookies domain="xxx.com" />

将Cookie的Domain限定要根域名下,以使下一级的子域都可以访问到这个Cookie.

另外提一下,如果你只是想让Session在根域下,其他的Cookie另外设置,可以使用这样的方法.

<sessionState sessionIDManagerType ="B2BSite.MySessionIDManager" mode="StateServer" stateConnectionString="tcpip=192.168.1.41:42424" timeout="60"/>

    public class MySessionIDManager : SessionIDManager, ISessionIDManager
{
void ISessionIDManager.SaveSessionID(HttpContext context, string id, out bool redirected, out bool cookieAdded)
{
base.SaveSessionID(context, id, out redirected, out cookieAdded); if (cookieAdded)
{
var name = "ASP.NET_SessionId";
var cookie = context.Response.Cookies[name];
cookie.Domain = "xxx.com";
cookie.Path = "/";
}
}
}

  

3. <machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>

不同的机器会产生不一致的Session,所以需要指定MachineKey,来使不同的机器产生的Session可以相互读取.

业务分发服务器web.config

1. <sessionState mode="StateServer" stateConnectionString="tcpip=192.168.1.41:42424" timeout="60"/>

tcpip=为主服务器的StateServerIP.你也可以独立出来.我这边是放在主服务器上了.

2. <httpCookies domain="xxx.com" />

3. <machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>

这个machinekey必须与主站点服务器的machinekey 一样.

注:最后也是最关键的一点.很多文件都没有提到,就是IIS 设置中站点的ID,两个网站必须一样,如果主站点服务器的站点ID是3,那么业务分发服务器的站点ID也必须是3.要不然就不可以访问.我在这个地方卡了很久.MSDN上有说明的.

最新文章

  1. sscanf()函数的使用及其实例
  2. M1卡介绍
  3. android系统平台显示驱动开发简要:LCD基本原理篇『一』
  4. java继承分析
  5. Python学习入门基础教程(learning Python)--3.3.1 Python下的布尔表达式
  6. getuid和geteuid的区别
  7. OSS项目进度(2.19)
  8. Objective-C方法与函数的区别
  9. Phpstorm-远程连接服务器实时编辑代码
  10. mysql [assword expired
  11. jvm回收器回收过程一:CMS和 G1的初认知(持续更新中)
  12. 使用fabric2打包部署文件
  13. SQLServer转PowerDesigner(转载)
  14. .NetCore中EFCore的使用整理(二)-关联表查询
  15. Codeforces 801C - Voltage Keepsake
  16. consensus sequence
  17. GetImageURL
  18. 原型相关的方法isPrototypeOf、Object.getPrototypeOf、hasOwnProperty、Object.getOwnPropertyName、Object.keys
  19. 基于Python的信用评分卡模型分析(二)
  20. Rest-Framework组件源码之认证、频率、权限

热门文章

  1. 【二分】【半平面交】Gym - 101309J - Jungle Outpost
  2. Problem I: 零起点学算法88——青年歌手大奖赛_评委会打分
  3. Codeforces Round #343 (Div. 2) B. Far Relative’s Problem 暴力
  4. 2015 百度之星 1003 棋盘占领 dfs
  5. 怎么提高DB的效率
  6. Inno Setup入门(十六)——Inno Setup类参考(2)
  7. AS3.0 效率优化
  8. 在matlab中clear,clc,clf,hold作用介绍
  9. 8.8.8.8和8.8.4.4 DNS域名解析服务器
  10. 关于TagHelper的那些事情——如何自定义TagHelper(TagHelper基类)