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) |