php session 实现
PHP Session 实现方法
启用 Session
在 PHP 脚本的最开始调用 session_start() 函数,该函数会初始化或恢复现有的 Session。确保在调用 session_start() 之前没有输出任何内容到浏览器,否则会导致错误。
<?php
session_start();
?>
存储 Session 数据
使用 $_SESSION 超全局数组来存储和访问 Session 数据。可以存储字符串、数字、数组等数据类型。
$_SESSION['username'] = 'admin';
$_SESSION['cart'] = ['item1', 'item2'];
读取 Session 数据
通过 $_SESSION 数组读取之前存储的数据。
echo $_SESSION['username'];
print_r($_SESSION['cart']);
删除 Session 数据
使用 unset() 函数删除特定的 Session 变量。
unset($_SESSION['username']);
销毁整个 Session
调用 session_destroy() 函数销毁当前 Session。注意,这不会立即删除 $_SESSION 数组中的数据,需要手动清除。

session_destroy();
$_SESSION = array();
Session 配置选项
修改 Session 过期时间
通过 session_set_cookie_params() 或 ini_set() 设置 Session 的过期时间。
ini_set('session.gc_maxlifetime', 3600); // 1小时
session_set_cookie_params(3600);
session_start();
自定义 Session 存储路径
使用 session_save_path() 函数设置自定义的 Session 存储路径。
session_save_path('/path/to/custom/session/dir');
session_start();
安全注意事项
防止 Session 劫持 启用 HTTPS 并设置 Session Cookie 为 Secure 和 HttpOnly。

ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
使用 Session 再生机制 定期更换 Session ID 以减少被劫持的风险。
session_start();
if (isset($_SESSION['last_regeneration']) && (time() - $_SESSION['last_regeneration'] > 3600)) {
session_regenerate_id(true);
$_SESSION['last_regeneration'] = time();
}
高级用法
自定义 Session 处理器
实现 SessionHandlerInterface 接口以自定义 Session 存储方式,例如存储到数据库。
class CustomSessionHandler implements SessionHandlerInterface {
public function open($savePath, $sessionName) {
// 初始化逻辑
return true;
}
public function close() {
// 关闭逻辑
return true;
}
public function read($id) {
// 读取逻辑
return '';
}
public function write($id, $data) {
// 写入逻辑
return true;
}
public function destroy($id) {
// 销毁逻辑
return true;
}
public function gc($maxlifetime) {
// 垃圾回收逻辑
return true;
}
}
$handler = new CustomSessionHandler();
session_set_save_handler($handler, true);
session_start();
分布式 Session 管理 在负载均衡环境中,使用共享存储(如 Redis 或数据库)管理 Session 数据。
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://redis-server:6379');
session_start();






