PHP操纵session存入数据库
时间: 2023-07-08 16:06:13 浏览: 40
在 PHP 中,我们可以使用 $_SESSION 变量来存储会话数据。默认情况下,会话数据是存储在服务器上的文件系统中。但是,我们也可以将会话数据存储在数据库中,以便更好地管理它们。
下面是一个简单的示例,演示如何在 PHP 中将会话数据存储在数据库中:
1. 创建一个名为 `sessions` 的数据库表,该表包含以下字段:
- `id` - 会话 ID
- `data` - 存储会话数据的字段
- `timestamp` - 记录会话创建时间的字段
```sql
CREATE TABLE `sessions` (
`id` varchar(32) NOT NULL,
`data` text NOT NULL,
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
```
2. 在 PHP 中设置会话存储处理程序,并在会话开始时调用它。以下是示例代码:
```php
<?php
// 设置会话存储处理程序为自定义函数
session_set_save_handler(
'session_open',
'session_close',
'session_read',
'session_write',
'session_destroy',
'session_gc'
);
// 启动会话
session_start();
// 自定义函数 - 打开会话存储
function session_open($save_path, $session_name) {
// 连接数据库
$db = new mysqli('localhost', 'username', 'password', 'database');
// 返回 true 表示成功
return $db ? true : false;
}
// 自定义函数 - 关闭会话存储
function session_close() {
// 关闭数据库连接
$db->close();
// 返回 true 表示成功
return true;
}
// 自定义函数 - 读取会话数据
function session_read($id) {
// 查询数据库获取会话数据
$result = $db->query("SELECT data FROM sessions WHERE id = '$id'");
// 如果查询成功,则返回会话数据
if ($result) {
$row = $result->fetch_assoc();
return $row['data'];
}
// 否则返回空字符串
return '';
}
// 自定义函数 - 写入会话数据
function session_write($id, $data) {
// 将会话数据插入数据库
$timestamp = time();
$result = $db->query("REPLACE INTO sessions (id, data, timestamp) VALUES ('$id', '$data', '$timestamp')");
// 返回写入结果
return $result ? true : false;
}
// 自定义函数 - 销毁会话
function session_destroy($id) {
// 从数据库中删除会话数据
$result = $db->query("DELETE FROM sessions WHERE id = '$id'");
// 返回销毁结果
return $result ? true : false;
}
// 自定义函数 - 垃圾回收
function session_gc($max_lifetime) {
// 删除过期的会话数据
$expired = time() - $max_lifetime;
$result = $db->query("DELETE FROM sessions WHERE timestamp < '$expired'");
// 返回清理结果
return $result ? true : false;
}
?>
```
在上面的代码中,我们使用了 `session_set_save_handler()` 函数来设置自定义的会话存储处理程序。然后,我们定义了 6 个自定义函数来处理会话的打开、关闭、读取、写入、销毁和垃圾回收操作。这些函数将会话数据存储在名为 `sessions` 的数据库表中。
最后,我们调用 `session_start()` 函数来启动会话,并开始使用 `$_SESSION` 变量存储会话数据。