php为sesion的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输出的冗余.
下面介绍一种基于mysql数据库的session存储方式.
首先要进行的配置如下:
1>php.ini中将session.save_handler = files 中的files改为user,其他默认即可,重启apache(好像没改也行啊)
2>本实例创建的数据库名叫php, username: root password:root
本实例设计的数据库的表结构如下所示:
复制代码 代码如下:
create table mysession(
session_key char(32) not null,
session_data text,
session_expiry int(11),
primary key(session_key)
);
第一列表示存储session id,第二列存储session中的数据,第三列存储有效期,呵呵(表结构就这么简单)
下面就是关键的那份自定义函数的实现session_set_save_handler(......)
复制代码 代码如下:
$expiry_time)
or die(sql语句执行失败);
if($row = mysql_fetch_array($query))
return $row['session_data'];
else
return false;
}
function mysession_write($key, $data)
{
@mysql_connect(localhost, root, root) //选择数据库之前需要先连接数据库服务器
or die(数据库服务器连接失败);
@mysql_select_db(php) //选择数据库mydb
or die(数据库不存在或不可用);
$expiry_time = time() + 1200; //获取session失效时间
//查询session的键值是否已经存在
$query = @mysql_query(select session_data from mysession
.where session_key = '$key')
or die(sql语句执行失败);
//如果不存在,则执行插入操作,否则执行更新操作
if(mysql_numrows($query) == 0)
{
//执行sql语句插入session的值
$query = @mysql_query(insert into mysession values('$key', '$data', $expiry_time))
or die(sql语句执行失败);
}
else
{
//执行sql语句更新session的值
$query = @mysql_query(update mysession set
.session_data = '$data', session_expiry = $expiry_time
.where session_key = '$key')
or die(sql语句执行失败);
}
return $query;
}
function mysession_destroy($key)
{
@mysql_connect(localhost, root, root) //选择数据库之前需要先连接数据库服务器
or die(数据库服务器连接失败);
@mysql_select_db(php) //选择数据库mydb
or die(数据库不存在或不可用);
//执行sql语句删除session
$query = @mysql_query(delete from mysession where session_key = '$key')
or die(sql语句执行失败);
return $query;
}
function mysession_gc($expiry_time)
{
@mysql_connect(localhost, root, root) //选择数据库之前需要先连接数据库服务器
or die(数据库服务器连接失败);
@mysql_select_db(php) //选择数据库mydb
or die(数据库不存在或不可用);
$expiry_time = time();
//执行sql语句删除session
$query = @mysql_query(delete from mysession where session_expiry or die(sql语句执行失败);
return $query;
}
//设置用户自定义session存储
session_set_save_handler('mysession_open',
'mysession_close',
'mysession_read',
'mysession_write',
'mysession_destroy',
'mysession_gc');
?>
最后面就是测试代码
1>存储页面 save.php
复制代码 代码如下:
2. 显示页面 show.php
复制代码 代码如下:
附加一个小经历: 有天莫名的再存储session的时候发现页面报这个错
failed to initialize storage module
后来找了相关资料后才知道是我的session存储采用数据库文件存储,而session_start()时,我的数据库还没醒来...
http://www.bkjia.com/phpjc/327846.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/327846.htmltecharticlephp为sesion的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储. 在访问量大的网站上采用这种方式就不大合适,因为这样会导...