如果 session 用数据库保存,那么每个使用 session 的页面都必须加载相应的代码
你做到了吗?

解决方案 »

  1.   

    这有个  session问题详解  可以看下  http://www.phpthinking.com/archives/318
      

  2.   


    嗯嗯,每次要用session的时候都会
    if (!isset($_SESSION)){
    require_once __DIR__ . '/SessionHandler.php';
    new \lib\SessionHandler();
    }
    SessionHandler.php文件里就有相应的代码,但问题还是其它页面读取不了session的值啊~
      

  3.   

    为防止意外情况出现
    程序应无条件加载 SessionHandler.php
    而实例化对象和 session_start() 都应在 SessionHandler.php 中进行
    你还使用了命名空间,这就更需要注意排查新的故障点
      

  4.   


    去掉条件引用以及去掉命名空间还是不行。
    现在不说不同的页面,就算是同一个页面也读取不了,如下
    error_log($_SESSION["captcha"]);
    $_SESSION["captcha"] = $text;
    第一句error_log($_SESSION["captcha"]);中的$_SESSION["captcha"]是想读取前一次存在数据库中的captcha 的值,此时数据库中是有值的,但是就是读不出来,显示“PHP Notice:  Undefined index: captcha”的错误,
    我的SessionHandler类中的session_read函数是这样的:
    function readSession($SID){
    $query = "select value from sessioninfo where sid= :sid";
    $stmt = $this->dbLink->prepare($query);
    $stmt->bindParam(':sid', $SID);
    if($stmt->execute())
    {
    $value = $stmt->fetch(\PDO::FETCH_ASSOC);
    /*error_log('sid:'.$SID);*/
    /*error_log('value:'.implode(',', $value));*/
    if(!empty($value))
    {
    return $value;
    }
    }
    }
    上面注释掉的代码读取到的$value是有值的,也就是说php读取到了值但是没有反序列化到内存里?
      

  5.   


    去掉条件引用以及去掉命名空间还是不行。
    现在不说不同的页面,就算是同一个页面也读取不了,如下
    error_log($_SESSION["captcha"]);
    $_SESSION["captcha"] = $text;
    第一句error_log($_SESSION["captcha"]);中的$_SESSION["captcha"]是想读取前一次存在数据库中的captcha 的值,此时数据库中是有值的,但是就是读不出来,显示“PHP Notice:  Undefined index: captcha”的错误,
    我的SessionHandler类中的session_read函数是这样的:
    function readSession($SID){
    $query = "select value from sessioninfo where sid= :sid";
    $stmt = $this->dbLink->prepare($query);
    $stmt->bindParam(':sid', $SID);
    if($stmt->execute())
    {
    $value = $stmt->fetch(\PDO::FETCH_ASSOC);
    /*error_log('sid:'.$SID);*/
    /*error_log('value:'.implode(',', $value));*/
    if(!empty($value))
    {
    return $value;
    }
    }
    }
    上面注释掉的代码读取到的$value是有值的,也就是说php读取到了值但是没有反序列化到内存里?原来问题果然是出现在这里的~
    不应该return $value而是应该return $value['value'];
    终于解决了~谢谢你们~