把session保存到数据库中:1、数据表:CREATE TABLE sessions ( 
   ses_id varchar(32) NOT NULL default '', 
   ses_time int(11) NOT NULL default '0', 
   ses_start int(11) NOT NULL default '0', 
   ses_value text NOT NULL, 
   PRIMARY KEY  (ses_id) 
) TYPE=MyISAM;

解决方案 »

  1.   

    2、session类:<?php
    /*
    Free for non-comercial use covered by GPL
    If you want to use this in a commercial package
    please contact me on [email protected] class allows you to store PHP session data
    in your database, it is modified to run with the
    PEAR::DB classUPDATED: 10/06/2004 - intermittent update bug fixed
    */
    //set sessions handler on php
    session_set_save_handler (array(&$session, 'open'), 
                              array(&$session, 'close'), 
                              array(&$session, 'read'), 
                              array(&$session, 'write'), 
                              array(&$session, 'destroy'), 
                              array(&$session, 'gc')); 
    class session{  var $session_limit = 300; //life of sessions in seconds
        
    function session(&$db){
    //set db handler
    $this->db = $db;
    }
    /* Open session, if you have your own db connection 
           code, put it in here! */ 
        function open($path, $name) { 
            if (isset($this->db)) return TRUE; 
    else return FALSE;
        }     /* Close session */ 
        function close() { 
            /* This is used for a manual call of the 
               session gc function */ 
            $this->gc(0); 
            return TRUE; 
        }     /* Read session data from database */ 
        function read($ses_id) {
            $session_sql = "SELECT * FROM sessions WHERE ses_id = '$ses_id'"; 
    $session_res = $this->db->getRow($session_sql); 
            if (!$session_res) { 
                return ''; 
            }        if ($session_res) { 
                $ses_data = $session_res["ses_value"];
    return $ses_data; 
            } else { 
                return ''; 
            } 
        }     /* Write new data to database */ 
        function write($ses_id, $data) { 
            $session_sql = "UPDATE sessions SET ses_time='" . time() 
                         . "', ses_value='$data' WHERE ses_id='$ses_id'"; 
            $session_res = $this->db->query($session_sql); 
    if (!$session_res) { 
                return FALSE; 
            } 
            if ($this->db->affectedRows() > 0) { 
                return TRUE; 
            }         $session_sql = "INSERT INTO sessions (ses_id, ses_time, ses_start, ses_value)" 
                         . " VALUES ('$ses_id', '" . time() 
                         . "', '" . time() . "', '$data')"; 
            $session_res = $this->db->query($session_sql); 
            if (!$session_res) {     
                return FALSE; 
            }         else { 
                return TRUE; 
            } 
        }     /* Destroy session record in database */ 
        function destroy($ses_id) { 
            $session_sql = "DELETE FROM sessions WHERE ses_id = '$ses_id'"; 
            $session_res = $this->db->query($session_sql); 
            if (!$session_res) { 
                return FALSE; 
            }         else { 
                return TRUE; 
            } 
        }     // Garbage collection removes old sessions 
        function gc($life) { 
            $ses_life = time() - $this->session_limit; 
            $session_sql = "DELETE FROM sessions WHERE ses_time < $ses_life"; 
            $session_res = $this->db->query($session_sql); 
            if (!$session_res) { 
                return FALSE; 
            }         else { 
                return TRUE; 
            } 
        } 
        // Users online 
        function users() { 
            $users_sql = "SELECT COUNT(ses_id) FROM sessions"; 
            $users_res = $this->db->getOne($users_sql);         if (!$users_res) { 
                return NULL; 
            }         else { 
                return $users_res; 
            } 
        } 

    ?>
      

  2.   

    3、使用例子:<?php
    /*
    Example of use, $db is your PEAR DB handler
    previously created.
    */
    require("sessionclass.php");
    $session = new session($db);
    session_start();//Now use php sessions as usual?>不想用数据库方法的话,还可以根据session文件时间和session文件个数统计,在unix下有效。
      

  3.   

    一大片的,看都看不明白。。
    我想用session记录很多数据。。有30来项。。
    可是,就是不行。
      

  4.   

    把用户登陆session写到数据库中.
      

  5.   

    建个登陆信息表,用时间去比较,当用户有查看网页时,表里时间更新,与当前时间做比较,超过多长时间没刷新网页的,删掉,关闭浏览器的有个javascript事件,用他打开另一页。把这个人信息删掉
      

  6.   

    我也是这么做的
    我做的这个东西,不支持JAVASCRIPT
      

  7.   

    wukol(草月)你这种态度天注定你是不能理解的,活该。
      

  8.   

    很简单啊,首先要明白的是这个统计数据不一定很准确,但比较准确点的做法是将session存入的DB中,这样查询session的个数便知道多少人在线,这样效率会有点问题,
    考虑到效率可以在用户login的时候写入online表,并判断是否有超时用户,如有则将其在online table中删除,如果用户logout删除该记录