PHP 把 session 写入mysql怎么写啊(要代码啊)!网上一所搜,多到是多。就是都不管用。唉!
请高手把可以用的源码发上来。不要复制,复制都都有问题,都不可以用。最好可以亲自测试一下哈!!嘿嘿,。
----
成功了。在追加200分!

解决方案 »

  1.   

    session_set_save_handler你可以取看看手册中这个函数的解释
      

  2.   

    自己写的一个SESSION存入数据库的类你看看!session.sql CREATE TABLE IF NOT EXISTS `session` (
       `id` varchar(32) NOT NULL,
       `time` int(10) NOT NULL,
       `timenow` int(10) NOT NULL,
       `data` text NOT NULL,
       `ip` varchar(15) NOT NULL,
       PRIMARY KEY  (`id`)
     ) ENGINE=MyISAM DEFAULT CHARSET=utf8; session.class.php
     [php]
     <?php 
     class session
     {
     public $db;
     public $maxtime=600;
     function __construct()
     {
       session_set_save_handler(array(&$this, 'openSession'),
             array(&$this, 'closeSession'),
             array(&$this, 'readSession'),
             array(&$this, 'writeSession'),
             array(&$this, 'destroySession'),
             array(&$this, 'gcSession'));
       session_name('test');
       session_cache_limiter('private, must-revalidate');
       session_start();
     } function openSession()
     {
       global $db;
       $this->db=$db;
       //下面的代码是因为当在window环境下.老是不进行gcSession操作,所以干脆写到把清除失效session放到open里
       $time=time()-$this->maxtime;
       $this->db->del("delete from `session` where `timenow`<'$time'");
       return true;
     }
     function closeSession()
     {
       unset($this->db);
       return true;
     }
     function readSession($id)
     {
       if($session=$this->db->getfirst("select * from `session` where `id`='$id'")){
        return $session;
       }else{
        return '';
       }
     }
     function writeSession($id,$data)
     {
       $ip=getip();
       $time=time();
       if($session=$this->db->getfirst("select `id` from `session` where `id`='$id'")){
        $this->db->update("update `session` set `data`='$data',`ip`='$ip',`timenow`='$time' where `id`='$id' ");
        return true;
       }else{
        $this->db->insert("insert into `session` (`id`,`data`,`ip`,`time`,`timenow`) values ('$id','$data','$ip','$time','$time')");
        return true;
       }
     }
     function destroySession($id) { 
       if($this->db->del("delete from `session` where `id`='$id'")){
        return true; 
       }else{
        return false;
       }
     }  function gcSession($maxlifetime) 
     {
       $time=time()+$this->maxtime;
       if($this->db->del("delete from `session` where `nowtime`<'$time'")){
        return true; 
       }else{
        return false;
       }
     }
     }
     require_once('db_class.php');
     $db_username="root"; 
     $db_password="root"; 
     $db_database="chat"; 
     $db_hostname="192.168.0.17";
     $db=new dbClass($db_username,$db_password,$db_database,$db_hostname);
     $db->connect();
     $db->select();
     mysql_query("set names 'utf8'") ;
     $session=new session(); //使用方法,在需要用到session的页面第一行直接require一下就行了
     ?>
     [/php] db_class.php
     [php] <?php
     class dbClass{ //开始数据库类
     var $username;
     var $password;
     var $database;
     var $hostname;
     var $result;
     function dbClass($username,$password,$database,$hostname){
     $this->username=$username;
     $this->password=$password;
     $this->database=$database;
     $this->hostname=$hostname;
     }
     function connect(){ //这个函数用于连接数据库
     $this->link=mysql_connect($this->hostname,$this->username,$this->password) or die("Sorry,can not connect to database");
     return $this->link;
     }
     function select(){ //这个函数用于选择数据库
     mysql_select_db($this->database,$this->link);
     }
     function query($sql){ //这个函数用于送出查询语句并返回结果,常用。
     if($this->result=mysql_query($sql,$this->link)) return $this->result;
     else {
     //这里是显示SQL语句的错误信息,主要是设计阶段用于提示。正式运行阶段可将下面这句注释掉。
     echo "SQL语句错误: <font color=red>$sql</font> <BR><BR>错误信息: ".mysql_error();
     return false;
     }
     }
     /*
       以下函数用于从结果取回数组,一般与 while()循环、$db->query($sql) 配合使用,例如:
     $result=$db->query("select * from xzy_teachfl order by tpx");
     while($row=$db->getarray($result)){
     echo "$row[id] ";
     }
     */
     function getarray($result){
     return @mysql_fetch_array($result);
     }
     function getarray2($result){
     return @mysql_fetch_array($result,MYSQL_ASSOC);
     }
     /*
       以下函数用于取得SQL查询的第一行,一般用于查询符合条件的行是否存在,例如:
       用户从表单提交的用户名$username、密码$password是否在用户表“user”中,并返回其相应的数组:
     if($user=$db->getfirst("select * from user where username='$username' and password='$password' "))
     echo "欢迎 $username ,您的ID是 $user[id] 。";
     else
     echo "用户名或密码错误!";
     */
     function getfirst($sql){
     return @mysql_fetch_array($this->query($sql));
     }
     /*
       以下函数返回符合查询条件的总行数,例如用于分页的计算等要用到,例如:
     $totlerows=$db->getcount("select * from mytable");
     echo "共有 $totlerows 条信息。";
     */
     function getcount($sql){
     return @mysql_num_rows($this->query($sql)); 
     }
     /*
       以下函数用于更新数据库,例如用户更改密码:
     $db->update("update user set password='$new_password' where userid='$userid' ");
     */
     function update($sql){
     return $this->query($sql);
     }
     /*
       以下函数用于向数据库插入一行,例如添加一个用户:
     $db->insert("insert into user (userid,username,password) values (null,'$username','$password')");
     */
     function insert($sql){
     return $this->query($sql);
     }
     //$db->del("delete from admin where user='".$user."'");
     function del($sql){
     return $this->query($sql);
     }
     function getid(){ //这个函数用于取得刚插入行的id
     return mysql_insert_id();
     }
     }
     /*
       主要函数就是这些,如果你自己有另外的需要,也可以自己添加上去。
       因为凡使用该类的都必须连接数据库,下面就连接并选择好数据库吧:
     */
     ?>
      

  3.   

    建表sessions,字段sesskey(varchar:45),value(varchar:45),expiry(int:10).
    $SESS_DBHOST = "localhost"; /* database server hostname */ 
    $SESS_DBNAME = "test"; /* database name */ 
    $SESS_DBUSER = "root"; /* database user */ 
    $SESS_DBPASS = "root"; /* database password */ $SESS_DBH = ""; 
    $SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); function sess_open($save_path, $session_name) { 
        global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;     if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) { 
            echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER"; 
            echo "<li>MySQL Error: " . mysql_error(); 
            die; 
        }     if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) { 
            echo "<li>Unable to select database $SESS_DBNAME"; 
            die; 
        }     return true; 
    } function sess_close() { 
        return true; 
    } function sess_read($key) {
        global $SESS_DBH, $SESS_LIFE; 
        $qry = "SELECT value FROM sessions WHERE sesskey = '$key'"; 
        $qid = mysql_query($qry, $SESS_DBH); 
        if (list($value) = mysql_fetch_row($qid)) { 
            return $value; 
        } 
        return false; 

    function sess_write($key, $val) { 
        global $SESS_DBH, $SESS_LIFE; 
        $expiry = time() + $SESS_LIFE;  
        $value = addslashes($val); 
        $qry = "SELECT * FROM `sessions` WHERE sesskey = '$key'";//查找是否有记录
        $qid = mysql_query($qry, $SESS_DBH) or die("query Error."); //结果
        if (mysql_num_rows($qid) > 0) {//有记录则更新 
            $qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' "; 
            $qid = mysql_query($qry, $SESS_DBH); 
        } 
        else{//无记录插入
            $qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";
            $qid = mysql_query($qry,$SESS_DBH);
        }
        return $qid; 

    function sess_destroy($key) { 
        global $SESS_DBH; 
        $qry = "DELETE FROM sessions WHERE sesskey = '$key' "; 
        $qid = mysql_query($qry, $SESS_DBH); 
        return $qid; 

    function sess_gc($maxlifetime) { 
        global $SESS_DBH; 
        $qry = "DELETE FROM sessions WHERE expiry < " . time(); 
        $qid = mysql_query($qry, $SESS_DBH); 
        return mysql_affected_rows($SESS_DBH); 
    } session_set_save_handler( 
    "sess_open", 
    "sess_close", 
    "sess_read", 
    "sess_write", 
    "sess_destroy", 
    "sess_gc"); session_start(); 
    $_SESSION['sample'] = 'esss';
      

  4.   

    session 用mysql 的内存引擎 memory啥的,对提高性能有很大的帮助,还有session 放memcache中是个好的办法.