对于IE,如果B窗口是由A窗口派生的(所谓派生是由连接、新建等方式产生),那么A和B属于同一个webbrowser实例,这样当然公用一个session;
如果你启动一个新的实例,就是重新启动一个新的IE浏览器(通过桌面上、图标、或者命令行等),那么就会不公用session

解决方案 »

  1.   

    我的情况就是B是一个新启动的实例,就是重新启动一个新的IE浏览器(通过桌面上、图标、或者命令行等,这种情况就很奇怪了,
    在我把全部IE关掉后,再打开一个IE,这时候的session就是一个新的session。这个是正常的。
    就只是A窗口和B窗口的情况不正常。
      

  2.   

    你没有试试第三个IE窗口的session吗?多给点信息问题就好解决了。等待......
      

  3.   

    有阿,也是一样,session ID值也是跟A窗口一样。
      

  4.   

    是阿,
    我在windows2000下用的php版本为:php 4.3.2
    没有这种情况,即可以正常使用session.
    打开B窗口,B窗口中的session ID 与A窗口中的session ID 不同,所以session是正确的。
    但是同样的代码,到了Linux下就不行了,出现以上错误。我想应该是配置文件的问题,但是我想不到是哪个文件。我是在Redhat Linux 8.0 自带的php+mysql+apache。php版本应该都是比较新的,是4.2.2,出现这样的问题真不知道是什么原因,会不会是版本的问题?
    我分别把windows2000下和Linux下的phpinfo()相关于session的列出来,如下:
    windows2000 php版本:4.3.2          session
    Session Support  enabled  
    Registered save handlers  files user  Directive Local Value Master Value 
    session.auto_start Off Off 
    session.bug_compat_42 On On 
    session.bug_compat_warn On On 
    session.cache_expire 180 180 
    session.cache_limiter nocache nocache 
    session.cookie_domain no value no value 
    session.cookie_lifetime 0 0 
    session.cookie_path / / 
    session.cookie_secure Off Off 
    session.entropy_file no value no value 
    session.entropy_length 0 0 
    session.gc_divisor 100 100 
    session.gc_maxlifetime 1440 1440 
    session.gc_probability 1 1 
    session.name PHPSESSID PHPSESSID 
    session.referer_check no value no value 
    session.save_handler files files 
    session.save_path /tmp /tmp 
    session.serialize_handler php php 
    session.use_cookies On On 
    session.use_only_cookies Off Off 
    session.use_trans_sid On On 
    Redhat linux 8.0 php版本:4.2.2         wddx
    WDDX Support enabled 
    WDDX Session Serializer enabled         session
    Session Support enabled Directive Local Value Master Value 
    session.auto_start
     Off Off 
    session.cache_expire
     180 180 
    session.cache_limiter
     nocache nocache 
    session.cookie_domain
     no value no value 
    session.cookie_lifetime
     0 0 
    session.cookie_path
     / / 
    session.cookie_secure
     Off Off 
    session.entropy_file
     no value no value 
    session.entropy_length
     0 0 
    session.gc_maxlifetime
     1440 1440 
    session.gc_probability
     1 1 
    session.name
     PHPSESSID PHPSESSID 
    session.referer_check
     no value no value 
    session.save_handler
     files files 
    session.save_path
     /tmp /tmp 
    session.serialize_handler
     php php 
    session.use_cookies
     On On 
    session.use_trans_sid
     0 0 
    请大家研究一下。
      

  5.   

    有请我们“唠叨”大侠来解决一下!!!这个问题我也有!如前一个用户登陆,生成一个session,同时再开一个窗口还是那个session。
      

  6.   

    好啊,aliyiyi(阿里)  你的情况和我一样,那这个问题的解决还有希望。我还以为只有我才遇到这种情况。那你的php版本是多少?windows下or Linux下
      

  7.   

    查看了一下,发觉 shanhe(TNT)说得应该是对的,我在我本机试了的确如此不知楼主的代码是如何的?在WIN下也一样的结果?
      

  8.   

    shanhe(TNT) 讲得一点都没有错,他那个是session的正常情况。
    我在2000下就能正常使用session,没有以上的情况,就只是在Linux 下有问题,代码是一样的,
    如下:
    a.php
    <?
    session_start();
    $_SESSION['cc'];
    $id=session_id(cc);
    echo "id:".$id;
    ?>显示的id就是session的id ,在tmp 文件夹里都有发现。
    我的情况并不是shanhe(TNT)的那种情况,如果是,那就说明没问题了。
    就是说A窗口和B才窗口的session ID 是一样的,那就公用一个session啦,
    并且B窗口和A窗口没有联系,B就只是在A窗口没有关闭的情况下重新打开的一个浏览器窗口。
    明白我的问题了吗?
      

  9.   

    说老实话,我在WinXP下,用的最新的appserv,就是那种配置的好好的PHP+MYSQL+APACHE,同样有这样的情况.
    就是关掉IE,再开,session还是有效
      

  10.   

    ni_ch(泥巴) ,你这种情况很有可能就是配置问题,
    修改一下php.ini的session.cookie_lifetime 改为:
    session.cookie_lifetime = 0
    就是设置session为在浏览器关闭是同时失效。
      

  11.   

    我在用NetCaptor这样的多窗口浏览器时session好像就会出问题,打开两个登陆窗口,先后以不同身份登陆之后两个窗口显示的都是最后登陆的那个用户ID。
    最后想出来一个办法:
    $login_temp=$_POST['login_name'];
    session_save_path("c:\\PHP\\session_temp");
    session_start();
    if(!session_is_registered('login_name'))
    session_register('login_name');
    if(!IsSet($login_name))
    $login_name=$_POST['login_name'];
    if(($login_name!=$login_temp) && (IsSet($login_temp)))
    $login_name=$login_temp;感觉挺笨的,但是确实管用。
      

  12.   

    dgm8(dgm8) 的意思是不是说zhangchang(乔乔) 的session是正常的?其实我觉得如果我重装一个高版本的php,如php4.3.2,可能会没有这个问题,可是有问题总是要解决的,是吧。说不定哪一天又出现这种情况,怎么办呢?
      

  13.   

    我已经重新安装一次PHP+Apache+MySQL,这一次放弃了RH linux 8自带的PHP,apache,mysql,
    我决定要自己编译一次,于是我下载了php 4.3.2,apache 2.0.47 ,mysql 4.0.13 
    因为在2000下正常用session的也是php 4.3.2
    还有apache 2.0.47算是最新的了,
    mysql 也很新,
    编译成功,安装成功。
    但是当我测试session时,竟然也出现一样的问题,我的天!!
    究竟是什么问题!?请问各位在Linux有没有这种情况?
    linux自带的有问题,现在连我自己编译的都有问题,难道就我的机子有问题?
    困惑ing!!! 有谁能解决这个问题,小弟感激不仅阿!
      

  14.   

    我也很困惑!
    我的系统是win 2000 p + PHP4.3.2!
    还是那个问题!!!
    不知道怎么解决!!!
      

  15.   

    a.php
    <?
    session_start();
    $_SESSION['cc'];
    $id=session_id(cc);
    echo "id:".$id;
    ?>
    楼主,以上是你的测试代码吗?
    请注意session_id函数不带参数时是读取session_id,带有参数是设置session_id。
    你可用$id=session_id();一试session_id(cc);中cc应视为枚举型的量(类似于echo cc;),win下不能正确识别是php for win的bug
      

  16.   

    我在win下,我检查了存放session的文件夹,发现无论用$id=session_id(cc);
    还是id=session_id();都能正确显示session的id值,没有bug.
    另外,我先进去linux,看看结果如何.
      

  17.   

    在Linux下试过了,用了id=session_id(); 跟用$id=session_id(cc);一样结果.
    所以应该与代码没有关系,是环境的问题.
      

  18.   

    用的是什么浏览器,不是那种 多窗口的吧直接用IE的试,应该不会这样的呀,我在WIN下和LINUX下都有实际的系统在跑,不会有这种问题出现呀,我记得PHP.ini里的SESSION设置是用的default设置
      

  19.   

    楼主你的问题和我这里一样啊,我以前没有注意到而且我试了一下,我A页用localhost打开,不关闭A,B页用127.0.0.1打开则是不同的session id,IE6 SP1...也许ms是判断每次有的WEB连接产生时使用已有的session?....糊涂
      

  20.   

    还没有解决?
    首先声明:由于我没有linux环境,无法测试。只能泛泛的说1、测试用的浏览器必须是同一系统下同一个版本的。这样可排除浏览器的问题
    2、session_id是保存于cookie中的,测试前请先删除cookie缓存文件
    3、不同的浏览器处理cookie的方式不同。如ie以单个对立文件保存,而ns的cookie是全部保存于一个文件
    4、新窗口必须是全新的进程,而不是浏览器菜单上的打开新窗口或ctrl+N
    5、测试前删除全部session临时文件在此条件下进行测试,然后贴出结果
      

  21.   

    "同一系统下同一个版本"不肯能吧?一个是windows一个是Linux,更何况Linux下没有IE,