PHP Session
Session 是 PHP 提供的一种服务器端会话管理机制,它能够在用户访问网站的不同页面时持续存储和跟踪用户数据。
通过为每个访问者创建唯一的会话 ID,Session 实现了跨页面请求的数据持久化,为构建有状态的 Web 应用提供了基础支持。
Session 实例
<?php
// 启动会话(必须在任何输出之前调用)
session_start();
// 设置会话变量
$_SESSION['username'] = '张三';
$_SESSION['last_login'] = time();
// 访问会话变量
echo "欢迎回来," . $_SESSION['username'];
// 删除单个会话变量
unset($_SESSION['last_login']);
// 销毁整个会话
session_destroy();
?>
✅ 核心特性说明:
- 会话初始化:使用
$_SESSION
前必须调用session_start()
- 会话变量:存储在
$_SESSION
超全局数组中 - 会话ID:每个会话的唯一标识符,可通过
session_id()
获取
Session 启动
在将用户信息存储到 PHP session 中之前,必须首先启动会话。
<?php
session_start(); // 必须先启动 Session
$_SESSION['username'] = '张三'; // 存储数据
echo "欢迎," . $_SESSION['username']; // 读取数据
?>
✅ Session 工作原理:
- 当
session_start()
被调用时,PHP 会检查客户端(浏览器)是否发送了有效的 Session ID(通常通过 Cookie PHPSESSID)。 - 如果没有,则生成一个新的 Session ID 并发送给客户端。
- 在服务器上创建或加载对应的 Session 数据文件。
- 浏览器再次请求时,自动在 HTTP 请求头中带上该 Cookie。
Session 存储
✅ 存储和取回session
变量的正确方法是使用 PHP$_SESSION
变量:
<?php
$_SESSION['username'] = "张三";
$_SESSION['last_login'] = time();
// 读取 Session 数据
echo "用户名:". $_SESSION['username'];
?>
✅ Session 文件存储的是序列化后的数据:
username|s:6:"张三";last_login|i:1634567890;
s:6
表示字符串长度 6,i:1634567890
表示整型时间戳
Session 销毁
在 PHP 中,可以使用unset()
函数清除特定的 Session 数据,或者使用session_destroy()
函数彻底销毁整个 Session。
✅ 使用unset()
函数清除特定的 Session 数据:
<?php
session_start();
if(isset($_SESSION['views']))
{
unset($_SESSION['views']);
}
?>
✅ 通过使用session_destroy()
函数彻底销毁 Session:
<?php
// 这里销毁整个 Session,你将失去所有已存储的 session 数据。
session_destroy();
?>
Session 使用场景
Session 通常用于在用户访问网站期间存储临时数据,主要包括以下几类信息:
数据类型 | 字段名 | 说明 | 示例值 |
---|---|---|---|
用户身份认证信息 | user_id | 用户ID | 12345 |
is_logged_in | 登录状态 | true/false | |
username | 用户名 | "admin" | |
role | 权限角色 | "admin", "user" | |
用户个性化数据 | language | 语言偏好 | "zh", "en" |
theme | 主题设置 | "dark", "light" | |
timezone | 时区 | "Asia/Shanghai" | |
临时操作状态 | csrf_token | 表单Token | "a1b2c3d4" |
cart_items | 购物车数据 | [{product_id: 1}] | |
form_step | 多步骤表单进度 | 1, 2, 3 | |
error_msg/success_msg | 错误/成功消息 | "操作失败", "订单完成" | |
安全相关数据 | login_attempts | 登录尝试次数 | 3 |
last_access_time | 最近访问时间 | 时间戳 | |
IP/User-Agent | IP地址/浏览器标识 | "192.168.1.1" |
Session 常用配置(php.ini)
session.save_handler = files // 保存方式(文件)
session.save_path = "/tmp" // 保存路径
session.name = "PHPSESSID" // Cookie名称
session.cookie_lifetime = 0 // 浏览器关闭后失效
session.gc_maxlifetime = 1440 // 24分钟后过期
Session 常用函数
session_id([$id])
:获取/设置当前会话 IDsession_name([$name])
:获取/设置会话名称session_regenerate_id()
:重新生成会话 IDsession_status()
:检查会话状态
Session 安全性
// 推荐的安全设置:
ini_set('session.cookie_httponly', 1); // 防止XSS获取cookie
ini_set('session.cookie_secure', 1); // 仅HTTPS传输
ini_set('session.use_strict_mode', 1); // 严格会话模式
session_regenerate_id(true); // 防止会话固定攻击
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
42
章节
30
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈