网络环境有2台windows 2008 (192.168.1.71,192.168.1.72) 需要部署成 WebFarm,提高容错性。 网站部署在2台机器上的2个站点,如何才能做到Session的共享呢?

第一个方法:不共享。用HAProxy作负载均衡,它支持session会话保持功能,即同一个IP只转发到一台服务器上。基于cookies的session sticky

第二个方法:State Server 。

选择71作为State Server,修改注册表的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters]中的AllowRemoteConnection,把它改成1,默认是不允许远程连接的,值为0,另外在这里也可以改Port 端口号,默认的是42424端口。启动asp.net state service。

在71,72上的IIS新建站点,不要用默认站点,文件路径,网站名字都要一样,SiteID也要一样。

修改web.config。 在每个站点的web.config上都设置如下: (machinekey 可以在iis管理界面自动生成)


<sessionState mode="StateServer" stateConnectionString=
"tcpip=192.168.1.71:42424" timeout="30" cookieless="false" /> <machineKey validationKey="我的validationKey"
decryptionKey="我的decryptionKey"
validation="SHA1" decryption="AES" />

网上很多文章讲到这一步就完了,但这样的话,2个站点所产生的SessionID还是不同了, 一定要确保这些共享session的网站使用相同的一级域名,比如 www.test.com,www1.test.com,www2.test.com等等的.test.com域的网站. 测试时一定要用域名访问,假如用ip,localhost等访问,SessionID是不同的

你可以在测试机器上修改C:\WINDOWS\system32\drivers\etc\host文件,增加2行

192.168.1.71 www.test.com

192.168.1.72 www1.test.com

然后在web.config增加一句

<system.web>
    <!-- 让其在跨站点访问时,使SESSION能共用 -->
    <httpCookies domain="test.com" />    
</system.web>

做一个aspx测试页面, 把Session.Session显示出来,看是不是一样,在71的WebSite 设置Session["abc"]="def", 然后在72上面Get Session看能不能取到值

第三个方法: 放在Sql Server里, 但我不赞成使用这个,因为sql server的连接数有限,很容易成为瓶颈

    <sessionState mode="SQLServer" sqlConnectionString="Data Source=127.0.0.1;User ID=ASPState;Password=ASPState;" timeout="60" />

第四个方法:放在MemCache里,自己实现custom的SessionStateProvider.

网上关于memcache的有2个实现,一个是enyim的https://github.com/enyim/memcached-providers (这个依赖CouchDB)

另外一个是http://memcachedproviders.codeplex.com/(只实现了Session,没实现OutputCacheProvider,这个net4.0才有),

他们也是用sessionID或者SessionID+ WebSiteName作为MemCache的Key的。这里就不详细说明了

State Server实现多机器多站点 Session 共享 全手记的更多相关文章

  1. 多服务器之间Session共享

    原理:多个服务器间想共享session,就相当于共享取多台主机上的一个变量,所以共享的思路就是让大家都能读取变量,实现的方法可以通过将session保存到专门的一个服务器上,所有服务器都去请求数据,也 ...

  2. Unable to make the session state request to the session state server处理

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  3. Unable to make the session state request to the session state server处理方法

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  4. 关于ASP.NET Session State Server

    最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡. 但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有S ...

  5. 如何应对Session丢失》》State Server

    Session丢失已经是一种习以为常的问题了,在自己也了解一些如何解决的问题,但是也一直没有机会去用,现在由于新的项目要在B/S下开发,所以不得不让我考虑Session的问题. 解决session丢失 ...

  6. 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  7. 转: 解决【Unable to make the session state request to the session state server】

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  8. ASP.NET State Server 服务 sessionState

    在发布ASP.NET网站的时候,出现state server错误:Server Error in '/' Application.----------------------------------- ...

  9. 关于多台机器之前session共享,sessionState mode="StateServer" 问题的困扰

    .net 多台机器共享session是很老的技术,一直很少用到session. 最近就出现了一个问题:三台前端,其中一台保存的session值死活不对,一样的环境,一样的配置文件,就是和另外两台获得的 ...

随机推荐

  1. ASP.NET程序也能像WinForm程序一样运行[转载]

    阅读目录 开始 操作方式 支持的ASP.NET程序类别 它也是个HTTP服务器 支持远程机器访问 不受限于Windows防火墙 尊重每个人的操作习惯 内置多标签浏览器支持 启动参数及配置文件 支持 . ...

  2. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——集群安装总览

    1,手动下载压缩包.tar(下载地址),采用tarball形式手工安装集群. 2,共启用13台虚拟机,CentOS6.5 64bit,nn1,nn2,rm1,rm2,dn1,dn2,dn3,dn4,d ...

  3. .NET条形码

    建议不要用CODE-39码,改用CODE-128码: CODE-39码密度比较低,条码数字内容太多,导致条码太长,缩短长度就只能减小X尺寸,造成识读困难: CODE-128码密度高,相同的数字生成条码 ...

  4. 如何获取模拟器安装的app的位置

    你可以死记下地址格式, 但是一旦不同的xcode和模拟器版本改变变了地址, 又得记, 从活动管理器里其实是可以直接查看的: Launch the app in the simulator Open A ...

  5. 给NSMutableArray添加copy属性就变成了NSArray

    -copy, as implemented by mutable Cocoa classes, always returns their immutable counterparts. Thus, w ...

  6. Android 虚拟键盘弹出把底部栏顶上去的解决办法

    在AndroidManifest中使用ActivityGroup的activity中加上:android:windowSoftInputMode="adjustPan"

  7. False 'Sharing Violation' Xcopy error message

    今天想要将QC的新工具自动拷贝到p4 用户机器上使用,为了避免每次通知大家升级啊!!! 于是,我在程序里调用了bat文件,执行拷贝操作,想在默默的情况下替换更新新版本工具,结果我测试发现没能成功更新版 ...

  8. 判断一个字符串同时出现几个字符的C#版本和JS版本

    C#版本,参考:http://www.cnblogs.com/dudu/p/3841256.html JS版本是我群友写的: var str="abcdef"; var arr=[ ...

  9. python中是否有单独的字符类型,通过下标的方式表示字符串中的字符

    说明: 在python中,没有单独的字符类型,一个字符呢就是一个大小为1的字符串. 并且可以通过下标的方式,表示字符串中的字符. 操作过程: 1.通过[ ]的方式表示字符串中的第几个字符 >&g ...

  10. Layui:设置select下拉框自动选中某项

    1.问题:layUI,在做编辑功能有下拉框数据时,需要初始化选中某个值,layUI官网没有相关api,可能我比较笨没找到 2.解决思路:出发点击事件 3.分析dom树结构,出发dl点击事件 方法: v ...