趣谈StateServer在Web Garden,Web Farm下的使用
上一篇翻译的博客【译文】漫谈ASP.NET中的Session已经介绍了Session的基础知识,如果看过了的话对Session应该有了一个比较清晰的认识了,现在我来谈谈我所遇到的困境以及对Session的一些看法。
我们是一家以查询服务为主的网站,然后Leader说,要给查询增加验证码╮( ̄﹏ ̄)╭ ,一开始,我骚包地使用了加减法的验证码(因为已经成为历史,找不到截图了),然后过了两天,客服MM就开始给我们反馈问题了,说接到了大量的客户投诉!嗯,是这样的

很疑惑啊(= ̄ω ̄=) ,不应该出现问题才对,因为我是用StateServer做了Session的集中式管理,也设置了相同的MachineKey了,按照各种教程来说都应该无缝对接才对啊,嗯~是不是因为我们的验证码的确太难了?20以内的加减法诶~好吧,我改!字母数字组合!这下简单了吧~过了两天,客服MM又来找了,客户说验证码还是输入不对啊!!!!!

这下奇怪了,我自己去试吧~经过多次尝试!

这是真的!︽⊙_⊙︽咋办咧?记日志吧~日志上线1分钟,就有N多输错的内容过来了,我看了一下,有的挺匪夷所思的~嘿嘿~
怎么有个奇奇怪怪的东西混进来了?
不过后来分析日志发现,很多识别出现问题,比如1和l,0和o,好吧,该把这些字符去掉~我大哥和我说,为了方便调试,把字母都去了吧~我深表同意!然后我们离真相只有一步之遥了~一看日志,真的有一些相差很大的输入~我基本确定了是Session跨域引发的问题。因为我们是用一个负载均衡设备做的Web Farm,我觉的理论上出现跨服务器的概率不大,因为本地是有DNS缓存的,缓存时间是20多分钟吧,我记得,但是既然出现了这个问题,就说明本地DNS缓存对负载均衡设备是比较无力的,之后进行诊断,只能祭出我大大神器~页面级调试~什么?你没听过?

对,就是在前端页面加一个这个东西,就能做到了

用了这玩意儿,什么Cookie,Session ID,Session Value统统跑不出你的把控,然后本地修改HOST,让他在我所控制下在两台服务器之间进行跳转。最后我100%地确定了!两台服务器的Session没有共享!

怎么样~SB了吧~照着各种资料设置,最后还是失败了!然后就开始了无穷无尽的找资料,然后就翻译出了那篇博客~但是还是没有解决我的问题。昨天下午,终于招到了线索!k325056讲到了这个问题!!
我必须总结后告诉你!两个站点的虚拟路径是要保证一致的!!!!而且是大小写敏感的
对,在我的调试大神器里有这个东西!我为什么要放出两条来呢?因为我必须难过地告诉你:我到现在也不知道怎么改这个虚拟地址!!!!!!!!!!◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣
但是聪明如我,还是发现了INSTANCE_ID和虚拟地址之间的关系了~嘿嘿~ID控制着虚拟地址的最后一位,而我们两台服务器上的网站ID是不同的~地址也就不同了~然后修改以下网站ID(这里有一个天坑!修改了以后我们的网站立马全部崩溃!特么的因为修改了ID以后IIS就把你的站点停止了~~~停止了.....停止了.......你需要手动开启你的站点)然后现在再用调试神器去观察,嘿嘿,生活是美好的~Session是统一的!
总结时间
1、StateServer很好用,很方便,采用集中式管理,支持数据压缩,在web.config里配置就好了,大神的这 篇博客里有 别怕英文,看图就好了~但是!请记住!这玩意儿对应用之间是有数据隔离的!要在web Farm里使用他的话,必须要保证两个站点在两台服务器上的虚拟目录要一致,大小写敏感!
2、根据上一条显示,如果是多个应用Session数据共享就会出现问题!所以我感觉,Sate Server模式更适合Web Garden环境使用!多个应用,有不同的Web Site ID的话要使用State Server共享数据是非常困难的!有资料显示可以通过反射来修改他的应用验证机制来实现这个目的。
趣谈StateServer在Web Garden,Web Farm下的使用的更多相关文章
- nginx+iis、NLB、Web Farm、Web Garden、ARR
nginx+iis实现负载均衡 在win2008R2上使用(NLB)网络负载均衡 NLB网路负载均衡管理器详解 [译文]Web Farm和Web Garden的区别? IIS负载均衡-Applicat ...
- Web Farm 和Web Garden
这两个都是提高网站性能的服务器端技术 1.Web Farm:如果应用程序被多个服务器托管,这种情况就可以称作Web Farm. 2.Web Garden: 指的是一个应用程序可以分成多个进程(w3wp ...
- Web Farm和Web Garden的区别
在这篇博文中,我将确切剖析Web Farm和Web Garden的区别和原理,以及使用它们的利弊.进一步地,我将介绍如何在各个版本的IIS中创建Web Garden. 英文原文 | Abhijit J ...
- What is the difference between Web Farm and Web Garden?
https://www.codeproject.com/Articles/114910/What-is-the-difference-between-Web-Farm-and-Web-Ga Clien ...
- 【转】浅谈常用的几种web攻击方式
浅谈常用的几种web攻击方式 一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是 ...
- [转]ASP.NET应用程序生命周期趣谈(三) HttpModule
在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理HttpApplication那里得到的授权,插手整个应用程序级别的事件处理.所有的HttpM ...
- web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)
web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...
- [转]ASP.NET应用程序生命周期趣谈(五) IIS7瞎说
Ps:建议初学者在阅读本文之前,先简要了解一下之前的几篇文章,以便于熟悉本文提到的一些关于IIS6的内容,方便理解.仅供参考. PS:为什么叫瞎说呢?我觉得自己理解的并不到位,只能是作为一个传声筒,希 ...
- 【WEB】web www http html hypermedia hypertext 技术名词的意思
www WWW是环球信息网的缩写,(亦作"Web"."WWW"."'W3'",英文全称为"World Wide Web" ...
随机推荐
- mysql 数据操作 单表查询 group by 介绍
group by 是在where 之后运行 在写单表查询语法的时候 应该把group by 写在 where 之后 执行顺序 1.先找到表 from 库.表名 2.按照where 约束条件 过滤你想要 ...
- 在一台server上部署多个Tomcat
版权声明: https://blog.csdn.net/u011518709/article/details/27181665 在一台server上配置多个Tomcat的方法: 这几天因为在研究OGS ...
- CSLA.Net学习(2)
采用CSLA.net 2.1.4.0版本的书写方式: using System; using System.ComponentModel; using Csla.Validation; using S ...
- 江苏新美星智能物流无人叉车AGV
新美星一家全球领先的液体包装解决方案供应商,高附加值的产品应用于食品饮料等行业,为液体食品和自动化系统提供完整解决方案.新美星,于CBST2017展会首次亮相了能够从仓库或工厂的某个地方把材料.托盘和 ...
- ffmpeg应用笔记
官网 http://ffmpeg.org/ 应用手册 http://ffmpeg.org/documentation.html 雷霄骅专栏 https://blog.csdn.net/leixiaoh ...
- Alpine Linux配置使用技巧【一个只有5M的操作系统(转)】
Alpine Linux是一个面向安全应用的轻量级Linux发行版.它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk. Alpine Li ...
- Python第二弹--------类和对象
Python中的任何一条数据都是对象.每个对象都由3部分组成:标识.类型和值.对象的标识代表该对象在内存中的存储位置(因此是不可更改的),对象的类型表明它可以拥有数据和值的类型. 创建 Dog 类根据 ...
- 凌华AMP-204C卡的CNC功能 即Feeder工具的使用。
Feeder 可以实现一些CNC之类的功能. 不过目前似乎只有两个轴的联动
- some tools
mac alfred http://www.cnblogs.com/chijianqiang/p/alfred.html
- Flask权限管理
权限管理功能的实现可以分为以下几个小块: 1,新建数据库表Role,里面包括id(Integer,主键)name(String),permission(Integer),default(boolean ...