使用php实现session
初始化 Session
在 PHP 中,使用 session_start() 函数初始化会话。该函数必须在任何输出发送到浏览器之前调用,否则会引发错误。通常放在脚本的最开始部分。
<?php
session_start();
?>
设置 Session 变量
通过 $_SESSION 超全局数组设置会话变量。可以存储字符串、数字、数组等数据类型。
$_SESSION['username'] = 'JohnDoe';
$_SESSION['user_id'] = 123;
$_SESSION['preferences'] = ['theme' => 'dark', 'language' => 'en'];
读取 Session 变量
直接通过 $_SESSION 数组访问已设置的会话变量。建议在使用前检查变量是否存在以避免未定义错误。
if (isset($_SESSION['username'])) {
echo 'Welcome, ' . $_SESSION['username'];
} else {
echo 'Session variable not set.';
}
销毁 Session
使用 session_destroy() 函数销毁所有会话数据。通常用于用户注销时清除会话信息。注意需先调用 session_start() 才能销毁会话。
session_start();
session_destroy();
删除单个 Session 变量
通过 unset() 函数移除特定的会话变量,而不是销毁整个会话。
unset($_SESSION['username']);
修改 Session 配置
通过 session_set_cookie_params() 或 ini_set() 调整会话参数,如生命周期、路径、域名等。
// 设置会话 cookie 有效期为 1 小时
session_set_cookie_params(3600, '/', 'example.com', true, true);
// 通过 ini_set 调整垃圾回收概率
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
安全注意事项
- 启用
session.cookie_secure和session.cookie_httponly以增强安全性。 - 使用
session_regenerate_id()防止会话固定攻击。
ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
session_regenerate_id(true);
完整示例代码
以下是一个完整的登录登出示例:
<?php
session_start();
// 用户登录
function login($username) {
$_SESSION['username'] = $username;
$_SESSION['last_login'] = time();
}
// 用户登出
function logout() {
session_unset();
session_destroy();
}
// 检查登录状态
function isLoggedIn() {
return isset($_SESSION['username']);
}
// 使用示例
login('JohnDoe');
if (isLoggedIn()) {
echo 'User is logged in as ' . $_SESSION['username'];
}
logout();
?>






