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
session_regenerate_id();
or
session_regenerate_id(false);