【发布时间】:2021-08-01 01:08:30
【问题描述】:
突然之间,我的自定义会话处理程序的 session_start() 无法正常工作。升级到 PHP 8 后我必须包含 destroy。这在 PHP 7.4 中不是问题。
private static function load()
{
# session_module_name("user");
session_set_save_handler(['\CB\Session', 'open'],
['\CB\Session', 'close'],
['\CB\Session', 'read'],
['\CB\Session', 'write'],
['\CB\Session', 'remove'],
['\CB\Session', 'gc'],
['\CB\Session', 'destroy']
);
session_start(); // Error here
}
public static function destroy($id)
{
return TRUE;
}
致命错误:未捕获的 ArgumentCountError:参数太少 函数 CB\Session::destroy(),通过了 0 并且期望在 会话.php: 堆栈跟踪: #0 [内部函数]:CB\Session::destroy() #1 /path/CB/Session.php(35): session_start() #2 /path/CB/Session.php(17): CB\Session::load()
为什么要为 session_start (login) 谈论 session_destroy ?我的注销工作正常。
编辑:由于某种原因 CB\Session::destroy() 在 session_start() 之前被调用
【问题讨论】:
-
destroy在哪里被调用?它指的是哪一行? -
在我的 act_logout 函数中。
$_SESSION = array(); if (isset($_COOKIE[session_name()])) setcookie(session_name(), '', time()-42000, '/'); @session_destroy(); # Throws an error in PHP7, so hence the @ -
你在哪里打电话
Session::destroy()?您问题中的类是如何集成到 PHP 的会话处理中的? -
我正在调用 session_destroy();仅在有人单击注销链接时调用的 act_logout() 中。无处。这就是我要为 PHP 8 修改的内容 - github.com/anjanesh/CB/blob/master/Session.php