出处:http://www.cnblogs.com/stangray/p/3328092.html

为什么还是那句话,在网上找了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上有说明的.

Windows 环境下分布式跨域Session共享(转)相关推荐

  1. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  2. 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题

    概念: 什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制.所谓同源是指,域名,协议,端口均相同. http://www ...

  3. 计算机网络组建对等网,计算机网络实验二组建WINDOWS环境下的对等网并共享资源.pdf...

    实验课程名称 计算机网络实验 专 业 班 级 学 生 姓 名 学 号 指 导 教 师 2012 至 2013 学年第 一 学期第 1 至 18 周 <计算机网络实验>实验报告 __2012 ...

  4. 面试官:分布式环境下,如何实现session共享

    点击关注公众号,实用技术文章及时了解 先了解一下为什么会出现这种session共享的解决方案? 随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集 ...

  5. php跨域session共享,PHP中利用COOKIE与SESSION联合实现SESSION跨域

    大家都知道 在一般情况下,一个网站只有一个域名,www.demo.com,但是也有些网站架构是由多个子域名组建的.所以就需要SESSION可以跨子域被 访问到,这样才可以实现用户的跨域登录.就是说客户 ...

  6. QQ登录IE下iframe跨域session和cookie失效问题的解决方案

    情景:webQQ登录,使用的是跨站点iframe弹窗登录,发现只有在IE浏览器下,登录存储session不起作用,一刷新页面就登出 分析:IE限制第三方session/cookie 随着IE版本的不断 ...

  7. IE下iframe跨域session和cookie失效问题的解决方案

    http://blog.csdn.net/wauit/article/details/9875157 转载于:https://www.cnblogs.com/thiaoqueen/p/7590475. ...

  8. Vue项目设置代理解决开发环境下的跨域问题

    首先需要安装axios,推荐使用npm安装 $ npm install axios --save 配置config->index.js中的proxyTable,内容如下: proxyTable: ...

  9. Spring Security系列教程解决Spring Security环境中的跨域问题

    原创:千锋一一哥 前言 上一章节中,一一哥 给各位讲解了同源策略和跨域问题,以及跨域问题的解决方案,在本篇文章中,我会带大家进行代码实现,看看在Spring Security环境中如何解决跨域问题. ...

最新文章

  1. python有道翻译-Python版有道翻译
  2. java 球面距离_[置顶] C语言实验题:已知地球上两点的经度和纬度求其球面距离...
  3. hdu 5311 Hidden String(find,substr)
  4. codeforces1451 E. Bitwise Queries(位运算妙用)
  5. Django项目--登录判断装饰器
  6. mysql下拉框回显_下拉框的回显 (修改时候)
  7. tensorflow分类的loss函数_Tensorflow Keras的loss函数总结
  8. 计算机excer试题,计算机电子表格excel练习题
  9. 网站打不开数据库错误等常见问题解决方法
  10. [转] iOS 开发者应该知道的 ARM 结构(转自apple4us)
  11. 拔丝芋头的Java学习日记---Day11
  12. ssm整合说明与模板-Spring Spring MVC Mybatis整合开发
  13. Android网络编程(八) 之 HttpURLConnection原理分析
  14. 如何巧用微信生态搭建和运营私域流量
  15. tomcat之配置文件详解
  16. 小强IT游记之大连行
  17. 【知识产权基础之专利权】第一章 专利权的客体
  18. Cross-sell and Up-sell
  19. .Net工程师面试笔试宝典
  20. 8051单片机Proteus仿真与开发实例-LM35温度传感器+ADC0804仿真

热门文章

  1. 【Oracle】设置快速恢复区及reset快速恢复区
  2. 【Linux】七种运行级别
  3. python异常和错误(syntax errors 和 exceptions)
  4. musicstore edit方法出错的原因和解决方法
  5. RpcException:No provider available for remote service异常
  6. Integer.ParseInt()异常
  7. python3.6.1+selenium3.0环境安装问题及解决方法
  8. Qt之高DPI显示器(二) - 自适配解决方案分析
  9. scp(安全副本)到ec2实例,无需密码
  10. 按值设置选择选项“已选择”