2008年12月25日更新:

       修正了一些错误,可以完全演示session保存到数据库的所有功能!

将PHP中的Session保存到数据库中,使用sessin_set_save_handler()函数。网上查了一下,说这方面的倒是不少,但是没有一个完全可用的代码示例,初学者不太容易掌握,这里给出详细的使用介绍及代码示例(参考了网上的文章)。

php保存session 默认的是采用的文件的方式来保存的,然而session是要时时刻刻的使用的,大量的用户需要创建很多的session文件,这样对整个的服务器带来性能问题,另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以需要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把它们的session保存在一台数据库服务器上就可以保存session的完整了,具体如何实现如下:

  1. php的session默认的情况下是采用的文件方式来保存的,我们在php的配置文件php.ini中可以看到这样的一行,session.save_handler="files",这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成user模式,即 session.save_handler="use"就可以了,但是,这仅仅是说明我门没有采用文件的方式存储session,我们还要选择数据库和建立数据库的表。
  2. 建立数据库和数据库的表结构,我们可以采用php可以使用的任何的数据库,这里使用mysql来做事例,可以根据需要可以使用其它数据库,同时因为mysql默认的存储引擎MyISAM没有事务处理的功能,这也比别的数据库更快。
  3. 创建数据库和对应的表
//创建数据库
create database session;
//创建表 
create table session (id char(100) primary key,data varchar(5000));4.编写SESSION处理函数(这里是最简化的程序)
<?php
$con =mysql_connect("127.0.0.1","root" , "111111");
 mysql_select_db("session");
 function open($save_path, $session_name) 
 {
     return(true);
 }function close() 
 {
     return(true);
 }function read($id){
  $sql = "SELECT * FROM session WHERE id='$id'";
  //echo $sql;
  if($result = mysql_query($sql)){
   $row = mysql_fetch_array($result);
   //var_dump($row);
   return $row["data"]; 
    }
    else{
         return "";
    }
 }function write($id, $sess_data){
  //echo "write".$id.":".$sess_data."<br>";
  $r = mysql_query("select * from session where id='$id'");
  if(mysql_num_rows($r) > 0){
   $sql = "update session set data='$sess_data' where id='$id'";
   $result = mysql_query($sql);
   if($result){
    return true;
    }
    else{
    return false;
    }
  }else{
   $sql = "insert into session(id,data) values ( '$id', '$sess_data')";
   //echo $sql;
   $result = mysql_query($sql);
   if($result){
    return true;
    }
    else{
    return false;
    }
  }
 }function destroy($id) {
     if($result = mysql_query("DELETE * FROM  session WHERE id='$id'")){
         return true;
     }
     else{
       return false;
     }
 }/*********************************************
 * WARNING - You will need to implement some *
 * sort of garbage collection routine here.  *
 *********************************************/
 function gc($maxlifetime) 
 {
   return true;
 }session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

 

将代码保存为session_user_start.php。

SESSION保存到数据库中的基本工作完成,在需要session的时候,包含文件session_user_start.php即可(最好文件的第一行include),SESSION的使用方法和使用files方式的完全一样。

5.一个使用session的例子。

请下载附件代码

 

将PHP中的Session保存到数据库中,使用sessin_set_save_handler()函数。网上查了一下,说这方面的倒是不少,但是没有一个完全可用的代码示例,初学者不太容易掌握,这里给出详细的使用介绍及代码示例(参考了网上的文章)。

有问题可以到(http://blog.opendigest.org)在本文后留言!

 

//proceed to use sessions normally?>

附件: session.rar (1.8 K, 下载次数:40)