class session { 
   // session-lifetime 
   var $lifeTime; 
   // mysql-handle 
   var $dbHandle; 
   function open($savePath, $sessName) { 
       // get session-lifetime 
       $this->lifeTime = get_cfg_var("session.gc_maxlifetime"); 
       // open database-connection 
       $dbHandle = @mysql_connect("localhost","root","123"); 
       $dbSel = @mysql_select_db("test",$dbHandle); 
       // return success 
       if(!$dbHandle || !$dbSel) 
           return false; 
       $this->dbHandle = $dbHandle; 
       return true; 
   } 
   function close() { 
       $this->gc(ini_get('session.gc_maxlifetime')); 
       // close database-connection 
       return @mysql_close($this->dbHandle); 
   } 
   function read($sessID) { 
       // fetch session-data 
       $res = mysql_query("SELECT value AS d FROM sessions 
                           WHERE sesskey = '$sessID' 
                           AND expiry > ".time(),$this->dbHandle); 
       // return data or an empty string at failure 
       if($row = mysql_fetch_assoc($res)) 
           return $row['d']; 
       return ""; 
   } 
   function write($sessID,$sessData) { 
       // new session-expire-time 
       $newExp = time() + $this->lifeTime; 
       // is a session with this id in the database? 
       $res = mysql_query("SELECT * FROM sessions 
                           WHERE sesskey = '$sessID'",$this->dbHandle); 
       // if yes, 
       if(mysql_num_rows($res)) { 
           // ...update session-data 
           mysql_query("UPDATE sessions 
                         SET expiry = '$newExp', 
                         value = '$sessData' 
                         WHERE sesskey = '$sessID'",$this->dbHandle); 
           // if something happened, return true 
           if(mysql_affected_rows($this->dbHandle)) 
               return true; 
       } 
       // if no session-data was found, 
       else { 
           // create a new row 
           mysql_query("INSERT INTO sessions ( 
                         sesskey, 
                         expiry, 
                         value) 
                         VALUES( 
                         '$sessID', 
                         '$newExp', 
                         '$sessData')",$this->dbHandle); 
           // if row was created, return true 
           if(mysql_affected_rows($this->dbHandle)) 
               return true; 
       } 
       // an unknown error occured 
       return false; 
   } 
   function destroy($sessID) { 
       // delete session-data 
       mysql_query("DELETE FROM sessions WHERE sesskey = '$sessID'",$this->dbHandle); 
       // if session was deleted, return true, 
       if(mysql_affected_rows($this->dbHandle)) 
           return true; 
       // ...else return false 
       return false; 
   } 
   function gc($sessMaxLifeTime) { 
       // delete old sessions 
       mysql_query("DELETE FROM sessions WHERE expiry < ".time(),$this->dbHandle); 
       // return affected rows 
       return mysql_affected_rows($this->dbHandle); 
   } 

$session = new session(); 
session_set_save_handler(array(&$session,"open"), 
                         array(&$session,"close"), 
                         array(&$session,"read"), 
                         array(&$session,"write"), 
                         array(&$session,"destroy"), 
                         array(&$session,"gc"));                      
session_start(); 数据库数据:
sesskey                              expiry    value  
42c009c25a94332107396bbffd3dc88f 1217847520    更新数据库时value字段是空的,为什么得不到session的值?

解决方案 »

  1.   

    用过一次,不爽
    现在用NFS共享SESSION
      

  2.   

    晕,我的系统不是LINUX的,是WINDOWS, 无法使用NFS共享。
    而且,我的不是多服务器的,只是同服务器上的不同域名之间共享SESSION。
      

  3.   

    你这段代码好眼熟啊,
    看了一顿没找到$sessData怎么给赋值的
      

  4.   

    你的代码给的就不全,没有给$sessData赋值,怎么知道会不会有结果呢