<?php
// 我的会话启动函数支持时间戳管理
function my_session_start() {
session_start();
// 不允许使用太旧的会话 ID
if (!empty($_SESSION['deleted_time']) && $_SESSION['deleted_time'] < time() - 180) {
session_destroy();
session_start();
}
}
// 我的会话重新生成 ID 函数
function my_session_regenerate_id() {
// 在会话处于活动状态时调用 session_create_id(),以
// 确保无冲突。
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// 警告:切勿将机密字符串用于前缀!
$newid = session_create_id('myprefix-');
// 设置删除时间戳。由于某些原因,会话数据不能立即删除。
$_SESSION['deleted_time'] = time();
// 结束会话
session_commit();
// 确保接受用户定义的会话 ID
// 注意:您必须为正常操作启用 use_strict_mode。
ini_set('session.use_strict_mode', 0);
// 设置新的自定义会话 ID
session_id($newid);
// 使用自定义会话 ID 启动
session_start();
}
// 确保启用了 use_strict_mode。
// 由于安全原因,use_strict_mode 是强制性的。
ini_set('session.use_strict_mode', 1);
my_session_start();
// 会话 ID 必须在以下情况下重新生成:
// - 用户登录
// - 用户注销
// - 经过特定时间段
my_session_regenerate_id();
// 编写有用的代码
?>