功能概述
Session 类提供了会话数据的管理,支持设置、获取、检查和删除会话数据,同时提供了会话前缀管理和批量操作功能。
详细用法
会话数据设置与获取
设置会话数据
// 设置基本数据
Session::set('user_id', 1001);
Session::set('username', '张三');
// 设置数组数据
Session::set('permissions', ['read', 'write', 'delete']);
// 设置对象数据
$user = new stdClass();
$user->id = 1;
$user->name = '李四';
Session::set('user_object', $user);
获取会话数据
// 获取基本数据
$userId = Session::get('user_id');
$username = Session::get('username');
// 获取数据并指定默认值
$role = Session::get('role', ['default' => 'guest']);
// 获取数据并转换类型
$userId = Session::get('user_id', ['type' => 'int']);
$isAdmin = Session::get('is_admin', ['type' => 'bool']);
// 获取数据并应用函数处理
$username = Session::get('username', ['function' => 'strtoupper']);
// 组合多个选项
$score = Session::get('score', [
'default' => 0,
'type' => 'float',
'function' => 'round'
]);
会话数据检查与删除
// 检查会话键是否存在
if (Session::has('user_id')) {
echo '用户已登录';
}
// 删除单个会话值
Session::delete('temp_data');
// 在条件满足时删除会话
if (Session::get('login_attempts', ['type' => 'int']) > 5) {
Session::set('is_locked', true);
Session::delete('login_attempts');
}
批量会话操作
// 获取所有会话数据(不带前缀)
$allSessions = Session::all();
foreach ($allSessions as $key => $value) {
echo "{$key}: " . json_encode($value) . "\n";
}
// 获取所有会话数据(带前缀)
$allWithPrefix = Session::all(true);
// 清空所有会话数据但保持会话活动
Session::clear();
// 完全销毁会话(包括会话ID)
if ($userLoggedOut) {
Session::destroy();
}
高级用法
会话前缀使用
// 配置文件中设置前缀
// 'session_prefix' => 'myapp_'
// 当使用前缀时,实际储存为 'myapp_user_id'
Session::set('user_id', 100);
// 读取时无需关心前缀
$userId = Session::get('user_id');
// 检查带前缀的键时也无需指定前缀
if (Session::has('user_id')) {
// 会自动查找 'myapp_user_id'
}
会话数据过滤与转换
// 获取时应用多个处理函数
$bio = Session::get('user_bio', [
'function' => ['trim', 'nl2br'],
'filter' => true // 应用 htmlspecialchars
]);
// 会话数据类型转换并限制长度
$title = Session::get('page_title', [
'function' => 'substr:,0,50', // 限制标题最长50字符
'type' => 'string'
]);
注意事项
- 所有会话键都会自动添加配置文件中定义的
session_prefix
前缀 get()
方法内部使用Http::handling()
进行数据处理,支持类型转换和函数应用destroy()
方法会完全销毁会话,而clear()
只清空会话数据- 使用
all(true)
可以获取包含前缀的原始会话数据,适用于调试