主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

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]):获取/设置当前会话 ID
  • session_name([$name]):获取/设置会话名称
  • session_regenerate_id():重新生成会话 ID
  • session_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
发表评论