时间:2021-07-01 10:21:17 帮助过:20人阅读
session_set_save_handle(open, close, read, write, destroy,gc);
session_set_save_handle()函数的参数说明如下的形式:
| 参 数 | 说 明 |
| open(save_path, session_name) | 找到 Session 存储地址,取出变量名称 |
| close() | 不需要参数,关闭数据库 |
| read(key) | 读取 Session 键值, key 对应 session_id |
| write(key, data) | 其中data 对应设置的 Session 变量 |
| destroy(key) | 注销 session 对应 Session 键值 |
| gc(expiry_time) | 清除过期的 Session 记录 |
一般应用参数直接使用变量,但是此函数中参数为 6 个函数,而且在调用时只是调用函数名称的字符串。下面将分别介绍这几个参数,最后将这些函数封装到一个类中。
(1)封装 session_open()函数,连接数据库,其代码格式如下:
<?php
function session_open($save_path,$session_name)
{
//连接 mysql 数据库
$handle = mysqli_connect('localhost','root','root','db_test');
// 判断数据库是否成功
if(!$handle)
{
die('打开数据库失败');
}
}
?>说明:在上面的代码中, $save_path和$session_name 两个参数并没有被使用,在这里可以将这两个参数去除,但是一般情况下还是建议朋友们保留输入的这两个参数,因为一般都会使用这两个变量。
(2)封装 session_close()函数,关闭数据库的连接,其代码格式如下:
<?php
function session_close()
{
$handle = mysqli_connect('localhost','root','root','db_test');
mysqli_close($handle);
return(true);
}
?>说明: 在这个函数中是不需要任何参数的,所以不论是 Session 存储到数据库还是文件中,只需要返回 true 即可。 但如果是 MYSQL 数据库,最好是将数据库关闭,以保证以后不会出现麻烦。
(3)封装 session_read()函数,在函数中设定当前时间的 UNIX 时间戳,根据 $key 值查找 Session 名称及内容,其实例代码如下所示:
<?php
function session_read($key)
{
//连接数据库
$handle = mysqli_connect('localhost','root','root','db_test');
//设定当前时间
$time = time();
$sql = "select session_date from tb_session where session_key='$key'and session_time>$time ";
$result = mysqli_query($handle,$sql);
$row = mysqli_fetch_array($result);
if($row)
{ //返回 Session 名称和内容
return($row['session_date']);
}else{
return(false);
}
}
?>说明 存储进数据库中的 session_expiry 是 UNIX 时间戳。
(4)封装 session_write()函数, 函数中设置了 Session 失效时间, 查找 Session 名称及内容。如果查询的结果为空,则将当前页面中的 Session 根据 session_id、session_name 、失效时间插入到数据库中;如果查询结果不为空,则根据 $key 修改数据库中 Session 存储信息,返回执行的结果,其实例代码如下所示:
<?php
function session_write($key,$data)
{
//连接数据库
$handle = mysqli_connect('localhost','root','root','db_test');
//设定失效时间
$time = 60*60;
// 得到 UNIX 时间戳
$lapse_time = time() + $time;
$sql = "select session_date from tb_session where session_key='$key'and session_time>$lapse_time ";
$result = mysqli_query($handle,$sql);
if(mysqli_num_rows($result) == 0) // 没有结果
{ //插入数据库SQL语句
$sql = "insert into tb_session values ('$key','$data',$lapse_time)";
$result = mysqli_query($handle,$sql);
}else{
// 修改数据库SQL语句
$sql = "update tb_session set session_key='$key', sessoin_data='$data', session_time=$lapse_time where session_key='$key' ";
$result = mysqli_query($handle,$sql);
}
return($result);
}
?>(5)封装 session_destroy()函数,根据 $key 值将数据库中 Session 删除,其代码显示如下:
<?php
function session_destroy($key)
{
//连接数据库
$handle = mysqli_connect('localhost','root','root','db_test');
// 删除 Session 的 SQL 语句
$sql = "delete from tb_session where session_key='$key'";
$result = mysqli_query($handle,$sql);
return($result);
}
?>(6)封装 session_gc()函数, 根据给出的失效时间删除过期 Session,其代码显示如下:
<?php
function session_gc($expiry_time)
{
//连接数据库
$handle = mysqli_connect('localhost','root','root','db_test');
// 将参数$expiry_time 赋值为当前时间戳
$lapse_time = time();
// 删除 Session 的 SQL 语句
$sql = "delete from tb_session where expiry_time<$lapse_time";
$result = mysqli_query($handle,$sql);
return($result);
}
?>以上为 session_set_save_handler()函数的 6 个参数(函数)。
下面通过函数 session_set_save_handler()实现 Session 存储数据库,其实现的代码如下:
<?php session_set_save_handler('session_open','session_close','session_read','session_write','session_destroy','session_gc');
session_start();
// 下面为我们定义的 Session
$_SESSION['user'] = 'tom';
$_SESSION['pwd'] = '12345';
?>以上就是php中session数据库存储实例详解的详细内容,更多请关注Gxl网其它相关文章!