StartMVC开发手册

可以快速上手的开发文档

手册目录

会话Session

功能概述

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'
]);

注意事项

  1. 所有会话键都会自动添加配置文件中定义的 session_prefix 前缀
  2. get() 方法内部使用 Http::handling() 进行数据处理,支持类型转换和函数应用
  3. destroy() 方法会完全销毁会话,而 clear() 只清空会话数据
  4. 使用 all(true) 可以获取包含前缀的原始会话数据,适用于调试