State Server实现多机器多站点 Session 共享 全手记
网络环境有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 共享 全手记的更多相关文章
- 多服务器之间Session共享
原理:多个服务器间想共享session,就相当于共享取多台主机上的一个变量,所以共享的思路就是让大家都能读取变量,实现的方法可以通过将session保存到专门的一个服务器上,所有服务器都去请求数据,也 ...
- 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 ...
- 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 ...
- 关于ASP.NET Session State Server
最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡. 但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有S ...
- 如何应对Session丢失》》State Server
Session丢失已经是一种习以为常的问题了,在自己也了解一些如何解决的问题,但是也一直没有机会去用,现在由于新的项目要在B/S下开发,所以不得不让我考虑Session的问题. 解决session丢失 ...
- 在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 ...
- 转: 解决【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 ...
- ASP.NET State Server 服务 sessionState
在发布ASP.NET网站的时候,出现state server错误:Server Error in '/' Application.----------------------------------- ...
- 关于多台机器之前session共享,sessionState mode="StateServer" 问题的困扰
.net 多台机器共享session是很老的技术,一直很少用到session. 最近就出现了一个问题:三台前端,其中一台保存的session值死活不对,一样的环境,一样的配置文件,就是和另外两台获得的 ...
随机推荐
- 为tomcat指定JDK版本
可以为tomcat指定JDK. 当系统中安装有多个版本的jdk时,可以为tomcat指定jdk版本. 在catalina.sh文件和setclasspath.sh文件开头的空白处加上如下一行: exp ...
- windows server 2003R2\2008R2\2012\2016 安装【故障转移群集】cluster
温故而知新! 靠,突然觉得it技能只要一年的时间就能忘记! virtualbox虚拟机安装群集,注意点: clone的虚拟机,sid问题.sysprep太慢了,不如重新安装快! 虚拟机增强组件,会影响 ...
- 一个标准的,兼容性很好的div仿框架的基础模型!
<!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" conten ...
- jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行
1.先给出问题解决后的代码 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...
- C#获取当前时区转换方法
今天给Mongodb插入数据的时候发现,日期时间对不上,原来Mongodb(麻狗)默认是0时区,所以日期当然出错. 所以用下面进行转换就可以: log.AddTime = DateTime.Speci ...
- Ubuntu16.04下安装CUDA8.0和tensorflow
GPU版的Tensorflow无疑是深度学习的一大神器,当然caffe之类的框架也可以用GPU来加速训练. 注意:以下安装默认为python2.7 1. 安装依赖包 $ sudo apt-get in ...
- iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺
frame和bounds是UIView中的两个属性(property). frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父亲的坐标系统) bounds指的是:该view在本 ...
- SpringMVC由浅入深day01_2springmvc入门程序
2 入门程序 2.1 需求 以案例作为驱动. springmvc和mybaits使用一个案例(商品订单管理). 功能需求:商品列表查询 2.2 环境准备 数据库环境:mysql5.5 先导入sql_t ...
- 【Android】Android中如何取消调转界面后EditText默认获取聚焦问题
参考资料: https://www.cnblogs.com/dream-cichan/p/aaaa.html http://blog.csdn.net/u013703461/article/detai ...
- windows命令行下用netsh实现端口转发(端口映射)
微软Windows的netsh是一个命令行脚本实用工具.使用netsh工具 ,可以查看或更改本地计算机或远程计算机的网络配置.不仅可以在本地计算机上运行这些命令,而且可以在网络上的远程计算机上运行. ...