二级域名导致asp.net中的Session_Id访问混乱并使用户访问产生异常
一个问题,不知道是我孤陋寡闻还是一直没有注意,我觉得这是一个很常见的应用问题,但是好像没有看到以前有什么反应,现在来请教大家。
2个域名,根域名相同,例如a.x.com和b.x.com
这两个域名的网站在不同的服务器,其中a.x.com上通过iframe嵌套了b.x.com的一个页面,例如
<iframe src="http://b.x.com/news.aspx" width="200" height="400"></iframe>
a.x.com需要用户登录以后才能完全访问使用所有功能。
现在的问题是,a.x.com时常会出现用户访问并没有登录,但是登录控件显示已经登录的状态,并出现另一个用户的信息。或者用户正常登录以后出现的是别人的信息。
这种情况也会在用户通过b.x.com链接访问a.x.com的时候发生。
经过调试和监测,我们发现用户在访问a.x.com的时候cookie中会获得两个session_id,导致用户无法正常识别。
这个问题曾经还询问微软技术人员,但没有获得圆满答案。
请教各位大虾,是否有遇到这种问题?如何解决的?
问题点数:100、回复次数:7Top
1 楼moodboy1982(老鹰)回复于 2005-10-24 21:30:44 得分 15
没有遇到过你这种情况呀。先帮你顶顶吧。Top
2 楼saucer(思归)回复于 2005-10-24 21:52:45 得分 50
听上去很怪,即使是同一机器,Session应该跟Application有关的,不同Application应该有自己的Session,你对Session Cookie的Domain或Path做了什么手脚了么?Top
3 楼linnchord(林克)回复于 2005-10-24 23:03:17 得分 0
思归说的正确 按照我以往的经验,即使是同一个服务器下同一个网站,只要存在于不同的虚拟目录都是不能共享session的……
但是目前的状况实在是奇怪啊,而且出现不只一个应用,一个网站登录应用,一个论坛应用都出现这种问题。论坛后来是通过把另一个站点设置为cookieless解决的,但是另一个登录网站不能这样设置,后来改成了Ip访问……
后来还问了微软的技术支持工程师,他说可以在application_EndRequest的时候修改aspnetsession_id的domain或者path……这种做法太奇怪了……Top
4 楼saucer(思归)回复于 2005-10-24 23:22:16 得分 20
try to use this ieHTTPHeaders tool to verify the session cookies
http://www.blunck.info/iehttpheaders.htmlTop
5 楼linnchord(林克)回复于 2005-10-25 10:50:15 得分 0
我们是用HttpWatch来检测cookie
情况如下:
1.
首先访问b.x.com 在cookie中获得Asp.Net_SessionId 例如是
ASP.NET_SessionId Received ezaskqaeiiw13245byopvrnk
然后再通过页面上链接访问a.x.com 检测显示客户端send仍然是这个SessionId
2.
访问a.x.com的页面,页面中通过iframe嵌套b.x.com的页面,这时候客户端会同时Recieved两个SessionID
ASP.NET_SessionId Received akywrherny2trri2bah1y0ft
ASP.NET_SessionId Received ezaskqaeiiw13245byopvrnk
最后似乎是根据先后次序判断那个为客户端SessionId的
在上面两种情况下,一般访问情况下应该都不会有什么问题,但是当访问量非常大的时候,无法保证该SessionId的唯一性,并且路径path都是 /
上面应该就是导致混乱的原因,不知道我这样理解是不是正确?
大虾们有什么办法解决吗?Top
6 楼lee_cl(豆腐·BombEr)回复于 2005-10-25 11:11:19 得分 15
奇怪的问题,没有碰到过。。。关注Top
7 楼linnchord(林克)回复于 2005-10-27 16:27:45 得分 0
http://www.microsoft.com/china/msdn/library/webservices/asp.net/securitybarriers.mspx
经过多天检测研究,最后看了上面的文章,最终结论这是无法避免的……
目前的结果,只有把session验证改为asp.net的form验证方式,以后应用都采用asp.net内置的form验证了。Top





