不可能吧
web server是根据cookie来区分session的,ctrl+n打开的IE不仅是在同一个session里面,而且是同一个进程。想在server端区分不同的IE不太现实。

解决方案 »

  1.   

    这是没法避免的问题,应当尽量不用session 
      

  2.   

    没有办法,不要用Ctol+N,直接点击IE图标开个新的浏览器。
      

  3.   

    我试了一下:
    所需文件:index.html&test1.jsp&test2.jsp.
    其中:index.html含有到test1.jsp和test2.jsp的连接。
    test1和test2分别含有一个100000级别的循环。
    步骤:
    1. 进入index.html,称为A;
    2. CRTL+N复制index.html称为B;
    3. 点击A的test1.jsp。
    4. 进行3的同时,点击B的test2.jsp。
    5. 结果A,B分别进入test1.jsp和test2.jsp。
    完毕。
    以上试验可以说明,在服务器端是知道这两个浏览器的不同的。
    否则的话,肯定A,B会进入同一个画面(相当于index.html点击test1.jsp的超连接后,不等“返回”迅速点击test2.jsp)。
      

  4.   

    我对session的原理不甚明白。试解释如下:
    1.client和server的交互是线程之间的1对1。
    2.client到server的信息中含有sessionid。server端的不同线程根据sessionid去取得session内容(由于A,B是同一个sessionid,自然就取得同一个session的内容)。
    敬请指正。
      

  5.   

    server是不知道不同的IE的,它只是根据收到的http请求来response.
    至于上面的例子,那是本地操作系统的功劳,跟server不搭嘎。
      

  6.   

    to lovesnoopy:
    那么,本地操作系统根据什么来把服务器返回的资料分配给不同的浏览器呢?
    (它怎么知道该让A->test1.jsp,B->test2.jsp).
      

  7.   

    关本地操作系统什么事?这只关TCP/IP通信的事!HTTP只不过是TCP/IP的一个应用而已,你开一个IE去服务器请求一个页面,只不过是开一个Socket 去服务器80端口通信而已,是什么内容该怎么显示才是IE后来要干的事,唯一的分辨标准就是你开一个IE作一个HTTP请求时本地开的是什么端口!
      

  8.   

    TO luodi
    你的Socket,你的TCP/IP不是操作系统实现的是那里来的?是天上掉下来的?to supersonics:
    ip包的包头里面有一个源地址,源端口,一个目的地址,目的端口。server会根据源地址,源端口来response.实现tcp/ip的操作系统知道那一个端口对应那一个进程/线程。随便找一本讲网络编程的书看看就明白了。
      

  9.   

    to luodi:
    ie是根据返回的数据来选择由哪一个窗口所在线程处理的吧。
    那么我想,肯定返回的数据中含有一个与本地某个数据相同的唯一标识。
    关键是这个标识是否会变(由于http协议是非连接的)。
    很有可能会变(原因如下:我先点击连接到csdn,后来等了2秒钟,没反应,又转到sina;这时csdn server返回了请求,显然这时浏览器不该处理csdn来的数据,如果根据是那个改变的标识,那么一切迎刃而解。)
      

  10.   

    to lovesnoopy:
    对于你13:12的回答,我想是不是你的那个端口就对应我13:15回答所说的唯一标识呢?
    (虽然上过网络课,可是这些东西一联系实际,就用不上了)。
      

  11.   

    TCP/IP 如果这个协议没装呢? 操作系统也用不上这个TCP/IP了。虽然现代操作系统都缺省支持TCP/IP,但它还只能认为是操作系统的外沿。不过这个问题其实不是关键吧。 :)另外要澄清的是:HTTP是无连接的是指应用层面上的协议,但它的底层协议是TCP/IP,是面向连接的!IE只是一个TCP/IP网络应用程序而已,它一样是要用面向连接的网络层协议TCP 来作HTTP请求,任何一个TCP/IP应用都应该知道自己和谁在通信,也不应该会收到别人的通信内容。建议好好理解一下TCP/IP与HTTP的关系。
      

  12.   

    在TCP/IP的具体实现中,确实有这么一个标号存在,可以具体参考这方面的书籍。
      

  13.   

    那么是不是说,我那个例子中,加入A&B都点击test1.jsp,那么从jsp(servlet)来说,这两个请求是完全相同的?如果这样,那么就真的一点办法也没有了。
      

  14.   

    to luodi:
    针对你最新的回答(13:28),这个标识对servlet该是不可见的吧。
      

  15.   

    对,这是底层的TCP/IP栈的实现中要考虑的事情,对于Servlet 这种应用来说是透明的,难不成要自已用Java 实现TCP/IP栈吗? :)
      

  16.   

    我绝望了。
    感谢以上所有热心人的回答,特别是luodi.
    虽然分数没什么用,我想给不给和给了有没有用应当是两回事。
      

  17.   

    to luodi:
    的确不是关键.这个问题到此为止。to supersonics:
    你说的这个标号是什么?我不理解。在http之上编程不需要了解底层的实现。
    这样讲:假设你自己构造一个http请求,sendto server, web server是不知道这个请求是你发的还是浏览器发的。
    HTTP是无连接的意思是两个http请求是独立的,他们之间没有任何关系,所以netscape才发明了cookie技术来记录request之间的关系。cookie是http header里的一项。session的概念就是用cookie来实现的。
      

  18.   

    to lovesnoopy:
    这个标识就是让server用来判断发送到client上那个端口(或之类的东西)的。
    再次谢谢你的关注。