我们知道在asp.net WebFarm下共享Session(StateServer模式),各站点在IIS中的Instance ID必须是一样的,为了这个微软还专门有个KB来说明。这个共享Session是建立在域名一样的情况下,才能有效。
但,如果域名不一样,但是ID一样,是不是也可以通过StateServer共享Session呢?
比如site1.domain.com;site2.domain.com,是不是可以共享Session呢?
我做了个实验,把这个两个站点保存SessionId的Cookie.Domain设置成顶级域名就可以共享SessionId了,即设为Cookie.Domain="domain.com".大家看看,我提问的问题,可有人知道StateServer和IIS之间的联系方式?
但,如果域名不一样,但是ID一样,是不是也可以通过StateServer共享Session呢?
比如site1.domain.com;site2.domain.com,是不是可以共享Session呢?
我做了个实验,把这个两个站点保存SessionId的Cookie.Domain设置成顶级域名就可以共享SessionId了,即设为Cookie.Domain="domain.com".大家看看,我提问的问题,可有人知道StateServer和IIS之间的联系方式?
解决方案 »
- Visual Studio 2008,怎么将类包打成dll
- CalendarExtender控件
- IE7和IE6的影响
- 求助
- 如何在 javascript 中获得 ascx 中的控件
- 上传图片的问题......
- 用Microsoft Visual Studio 2005除了作网站,还能作什么,最好给出一个简单实用的小例子的代码
- vs.net2003自帶的CrystalReport,我注冊了一下就用不了了
- 我使用EditCommandColumn编辑当前记录时,点击保存却因为同页面的添加记录的验证控件的存在而执行不了,怎么办?
- 为什么我用DROP TABLE 'tabname'删除表会出现--"没有为命令对象设置命令"的错误(Access)?
- 做网站的和做b/s软件的有什么区别?差别大吗?
- 网页中播放音乐的问题
session 会被存在state server上一个名为aspnet_state.exe的service的内存中,这个service是一个独立的进程,
可以运行在和IIS不同的机器上, 防止工作进程崩溃后session丢失.
首先要启动 service : net start aspstate
再在web.config中设定mode,server, port
<configuration>
<sessionstate mode=”stateserver”
cookieless=”false”
timeout=”20″
server=”127.0.0.1″
port=”42424″ />
</configuration>
偶问得是:如果域名不一样,但是站点的 Instance ID一样,是不是也可以通过StateServer共享Session??
到底StateService是怎么区分不同站点的Session的呢?
你说的没错,我最终的问题就是 StateServer怎么区分不同Instince的?
但是我做的测试,即使是一样的InstanceId,域名不同Session不能共享,虽然SessionId共享了?
cpp2017(慕白兄) 那位同学想在一台机器上实现共享,基本不可能的,因为同一台服务器的不同WebSite Id的肯定是不同的,所有肯定不能共享地:)
SessionId一样,是可以使用表单认证,但是Session的值还是不能共享,郁闷中...To LoveCherry
我猜测也不行,要不然,大家都不要辛苦做什么SSO方案了:)
但为什么不行,微软也没有什么说法,要是有什么文档的话,估计应该可以解决的。
周末有空分析下,有那位高手愿意和我一起分析:),或许可以找到解决的方法
不过猜测 StateServer 对于 不同 服务器 之间的共享 除了 域的验证 肯定 在服务器通信期间 会加入IP的验证来区别不同的服务器吧
没错就是这个KB,IP验证应该不可能,因为在Web Farm的情况下,各台服务器的IP都是不一样的。
关于域的验证,我觉得是通过SessionId来区分的,默认情况下asp.net保存SessionId的Cookie.Domain属性是不一样的,是全域名的,当时可以手工改这个Domain的值,强制让他们一样。我做了测试,好像还是不行。
hertcloud 说域的验证可有什么依据?
1.SessionId
2.HttpRuntime.AppDomainAppId
3.Machine.Config中ValidationKey
说的好,像这种好东东,研究好了共享一下,不胜感激
1.SessionId
2.HttpRuntime.AppDomainAppId
3.Machine.Config中ValidationKey可是,我测试下来还是不行! 估计可能还有别的因素
1.保证各子站点SessionId相同,设置Cookie.Domain=".youdomain.com" 就可以了
2.HttpRuntime.AppDomainAppId 一致,其就是就是站点的Instance ID一致,具体请查考 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;3250563.Web.config中配置machineKey相,不要用系统默认的,要自己生成。怎么生成machinekey, msdn上也有文章介绍的。
另外,我刚才没有测试成功,好像因为我改了web.config.comments这个配置文件,仅改这个似乎不行。还要该web.config文件。好了,谢谢大家的关注!
以下帖子给分。
如何在C#.net WEB2005开发中获取dropdownlist在网页中的位置坐标?
http://community.csdn.net/Expert/topic/5481/5481151.xml?temp=.4136316
以下帖子给分。
如何在C#.net WEB2005开发中获取dropdownlist在网页中的位置坐标?
http://community.csdn.net/Expert/topic/5580/5580708.xml?temp=.7489435
发错连接,更正在发送。