2008年12月25日更新: 修正了一些错误,可以完全演示session保存到数据库的所有功能! 将PHP中的Session保存到数据库中,使用sessin_set_save_handler()函数。网上查了一下,说这方面的倒是不少,但是没有一个完全可用的代码示例,初学者不太容易掌握,这里给出详细的使用介绍及代码示例(参考了网上的文章)。 php保存session 默认的是采用的文件的方式来保存的,然而session是要时时刻刻的使用的,大量的用户需要创建很多的session文件,这样对整个的服务器带来性能问题,另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以需要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把它们的session保存在一台数据库服务器上就可以保存session的完整了,具体如何实现如下:
- php的session默认的情况下是采用的文件方式来保存的,我们在php的配置文件php.ini中可以看到这样的一行,session.save_handler="files",这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成user模式,即 session.save_handler="use"就可以了,但是,这仅仅是说明我门没有采用文件的方式存储session,我们还要选择数据库和建立数据库的表。
- 建立数据库和数据库的表结构,我们可以采用php可以使用的任何的数据库,这里使用mysql来做事例,可以根据需要可以使用其它数据库,同时因为mysql默认的存储引擎MyISAM没有事务处理的功能,这也比别的数据库更快。
- 创建数据库和对应的表
//创建数据库 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) |