“问题的提出:  解了session概念后,我在为我单位编写一个进销存系统中发现需要让多个用户可以同时进入一个php应用程序。原来设计的静态的唯一的session ID导致数据混乱。这样,动态生成一个唯一的session ID成为当务之急。  解决办法很简单:我用了php文件名+时间戳为唯一的session ID,这样在我的程序中的每个session就各就各位,不再混乱了。
下面把我的源代码公布,方便也有同样的问题的朋友多一个解决方法。//Start a PHP session to preserve variables.
      if ( empty($mysessionname) ) {
         $micro = microtime();
         $micro = str_replace(" ","",$micro); // strip out the blanks
         $micro = str_replace(".","",$micro); // strip out the periods
         $mysessionname = "po_maint" . $micro;
      }
      session_name($mysessionname);
      session_start();程序注释:  我用mysessionname为页面间唯一的sessionname传递变量,如果你也用到这个名字必须把上述程序做个小小的改动。Mysessionname不能为session的内部变量名,因为他在session开始之前就已经存在了。Mysessionname也不能用cookie方式存放,因为多个session肯定会覆盖掉原先的cookie文件。你可以用隐含表单的域来保存它。这样就不会有问题。欢迎来信讨论。让我们一起做得更好。
”不太理解上面的话

解决方案 »

  1.   

    session_id是一个串而不是数,所以不会等于0。哪怕该串全由数字组成正想问呢,没想你把那个帖子给结了。请给出表结构,以便测试。
      

  2.   

    我测试时session_id就是自动被设为0。不知道又是为什么?那个表结构是:
    CREATE TABLE sessions ( 
    sesskey char(32) not null, 
    expiry int(11) unsigned not null, 
    value text not null, 
    PRIMARY KEY (sesskey) 
    );
      

  3.   

    经测试,没有发现你说的现象你这样测试一下:
    <?php
    session_start();
    echo session_id();
    ?>
    看一下结果
      

  4.   

    我echo session_id(); 后是0是在不用mysql存session而用平常的files存session时的测试。有可能是我机子问题了。但我把apache和mysql重启后仍然是session_id=0。
    请问php.ini中session的详细配置
      

  5.   

    问题差不多解决了:
    session_id=0可能是cookie限定问题,因为我每次都是用http://localhost/.....php测试,当用http://ip/....php测试时就能自动生成32位的session_id了。