举例如下:
1.有三个页面 a.aspx,b.aspx,c.aspx。
2.先打开 a 页,点击其中一个button弹出模式窗口 b ,再点击 b 中一个<a target='_blank'>或用 window.open 打开窗口 c。以上三个页面中共享同一个 session 数据。当客户端只用一个ie窗口做以上操作时正常。如果客户端打开1个以上 ie 窗口,那么除了第1个窗口正确外,其余所有窗口中打开的 c 页都不能共享 session 数据,而 a、b两页可以。
3.随后我在三个页面中都输出 sessionID ,然后打开n个ie查看结果发现个奇怪现象。在 c 页面中输出的 sessionID 永远是第一个ie窗口的sessionID。可以访问这个地址看到以上情况:http://211.94.196.68/test/webform1.aspx
请大家帮忙看看。

解决方案 »

  1.   

    zhongwanli 为什么是一定的,规则又是什么?我是不明白请知道的解释一下。
      

  2.   

    三个页面的SessionID肯定是相同的。不能共享 session 数据是什么意思?取Session中的值吗?
      

  3.   

    因为是session是依赖于Cookies的,你可以把设置一下的Cookies
      

  4.   

    Open打开的窗口与父窗口已经不在同一个会话里,暂时没有解决办法.
      

  5.   

    直接启动多个IE,Session不会共用的
      

  6.   

    一个SessionID代表一次会话,如果客户端开不同的浏览器窗口(特别是不同的浏览器),要重新建立一次会话!
      

  7.   

    大家可以试试我上面给出的地址。如果只打开一个 ie 窗口,顺序跳转 a、b、c三个页面是可以从 session 中取到值的。当打开多个 ie 时,只有第一个可以。其余窗口的 c 页面输出的 sessionID 都是第一个ie的。
      

  8.   

    当你第一次把值附给session["*"]时,系统便会把这个session["*"]存入内存中,当其它页面要调用session["*"]时,便会从内存中调这个session["*"],所以。。
    如果想要它不一样只能重新附值
      

  9.   

    to nemowang:
      open 打开和用 <a> 打开是同样的效果。
      

  10.   

    to avisnet(第十维度) :
      当我没做这个实验时也是认为三个窗口肯定是一个 sessionID,可是输出的结果并不是这样。
      我在三个页面中共享的是 DataSet 存在 session 中。
      

  11.   

    to h731_123() 
      可能是我没说清楚,我已经在 a 页中赋了值。想在其它两个页面中能读出来使用。  就是说用n个 ie 打开这个地址 http://211.94.196.68/test/webform1.aspx。只有第1个ie可以正常工作,其余 ie 在跳到 c 页时都使用的是第1个 ie 的 SessionID,自然也就取不到值了。
      

  12.   

    有个这种感觉,你打开C的方法使得该IP地址的页面已被缓存,cookie被保存后,不论是哪个父页面打开,它首先都会取得缓存,这样得到的session自然是一样的!
      

  13.   

    to jedliu(21世纪什么最贵? 人才!) :
      缓存问题考虑过了,我在 url 尾部添加了 (new date()).getSeconds 这种类似的东西,url每次都不同。
      

  14.   

    IE是进程内共享Cookies,进程间不共享Cookies,而Session依赖于Cookies。如果你的“多个IE”不是由同一个IE窗口打开而来,而是另外启动一个新的IE实例,就是一个新的IE进程,这个进程与原本的IE进程不共享Cookies,也就不共享Session。
      

  15.   

    to jedliu(21世纪什么最贵? 人才!) :
      缓存问题考虑过了,我在 url 尾部添加了 (new date()).getSeconds 这种类似的东西,url每次都不同。
    是,我知道,我说的那些就是分析造成这种结果你可能采取的方法!
      

  16.   

    to cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz):
      我说的“多个IE”不是ctrl+n 或者 文件->打开 产生的。都是新的进程,通过 sessinoID 可以看出来。
      另外,每个IE都要顺序打开 a、b、c三个页面才能完成操作。如果都是用 <a> 跳转就没有我遇到的这种问题了。现在是 a页去 showModalDialog 打开 b,b中在用 <a> 或 window.open 打开 c。以上操作同一个 IE 窗口下可以或享session,多余一个的话 c 页面使用的是第一个IE窗口的SessionID。
      

  17.   

    大家拿两个窗口打开 http://211.94.196.68/test/webform1.aspx 这个地址,看看 sessionID 的输出内容就清楚我遇到的问题了
      

  18.   

    我也碰过类似的问题,用windos.open打开的页面,不能捕获session.
      

  19.   

    倒,
    3.随后我在三个页面中都输出 sessionID ,然后打开n个ie查看结果发现个奇怪现象。在 c 页面中输出的 sessionID 永远是第一个ie窗口的sessionID。
    不这样才奇怪了
      

  20.   

    to blackant2(乔峰)
      你没理解我写的第3点。
      
      就是说在 a 页面中通过 showModalDialog 打开 b 页后,再在 b 页用 <a> 或  window.open c 页面,这时如果你的机器只有这三个 ie 窗口的话那么 sessionID 是相同的。如果在打开 a 之前存在任何一个已经打开的 ie 窗口,那么 c 页中输出的 sessionID 就是那个最早窗口的 sessionID。