我的会话变量在调用session_regenerate_id(true)之后会消失?

问题描述 投票:0回答:1
我有一个方法createSession()调用session_regenerate_id(true);为了防止会话固定:

class Session { public string $id; public string $username; public string $role; public function __construct(){ session_start(); $this->id = $_SESSION['id'] ?? 0; $this->role = $_SESSION['role'] ?? 'guest'; $this->username = $_SESSION['username'] ?? 'Guest User'; } public function updateSession(array $user){ $this->createSession($user); } public function createSession(array $user){ session_regenerate_id(true); $_SESSION['id'] = $user['id']; $_SESSION['username'] = strstr($user['email'], '@', true); $_SESSION['expire'] = time() + 30 * 60; $_SESSION['role'] = $user['role']; } public function destroySession(){ $_SESSION = []; $cookie_data = session_get_cookie_params(); setCookie(session_name(), '', time() - 42000, $cookie_data['path'], $cookie_data['domain'], $cookie_data['httponly']); session_destroy(); } }
调用此功能后,所有先前的会话数据似乎都丢失了。

这种行为正常吗? 如何在不丢失现有数据的情况下安全地重新生成会话?

我需要在再生之前手动复制会话值吗? 我使用php 8.2并将会话存储在基于文件的处理程序中。会话存储设置会影响这一点吗?

function session_regenerate_id(bool $delete_old_session = false): bool {}

这是创建函数的方式,因此只需调用该函数而无需传递params
php session
1个回答
0
投票
session_regenerate_id();
or

session_regenerate_id(false);
    

© www.soinside.com 2019 - 2025. All rights reserved.