session_start() 在 PHP 8 中给出 session_destroy() 的错误
session_start() giving error for session_destroy() in PHP 8
突然之间,我的自定义会话处理程序的会话 session_start() 无法正常工作。升级到 PHP 8 后,我必须包含销毁。这在 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;
}
Fatal error: Uncaught ArgumentCountError: Too few arguments to
function CB\Session::destroy(), 0 passed and exactly 1 expected in
Session.php:
Stack trace:
#0 [internal function]: CB\Session::destroy()
#1 /path/CB/Session.php(35): session_start()
#2 /path/CB/Session.php(17): CB\Session::load()
为什么说 session_destroy 用于 session_start(登录)?我的注销正常。
编辑:由于某种原因 CB\Session::destroy() 在 session_start()
之前被调用
根据the session_set_save_handler manual page,论点是:
- $打开
- $关闭
- $阅读
- $写
- $销毁
- $gc
- (可选)$create_sid
- (可选)$validate_sid
- (可选)$update_timestamp
您提供的方法名称是:
- 'open'
- 'close'
- 'read'
- 'write'
- 'remove'
- 'gc'
- 'destroy'
所以会话“destroy”事件调用的方法是\CB\Session::remove
,\CB\Session::destroy
方法是为“create_sid”事件调用的。由于 create_sid 回调是在没有任何参数的情况下调用的,因此会出现您所看到的错误。
在你的问题开头你说:
I had to include destroy after upgrading to PHP 8.
由于您实际包含的是一个损坏的 create_sid 回调,无论您认为您正在解决的问题可能仍然需要解决,但那将是一个不同的问题。当前错误的解决方案是从代码中删除错误的 ['\CB\Session', 'destroy']
行。
突然之间,我的自定义会话处理程序的会话 session_start() 无法正常工作。升级到 PHP 8 后,我必须包含销毁。这在 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;
}
Fatal error: Uncaught ArgumentCountError: Too few arguments to function CB\Session::destroy(), 0 passed and exactly 1 expected in Session.php: Stack trace: #0 [internal function]: CB\Session::destroy() #1 /path/CB/Session.php(35): session_start() #2 /path/CB/Session.php(17): CB\Session::load()
为什么说 session_destroy 用于 session_start(登录)?我的注销正常。
编辑:由于某种原因 CB\Session::destroy() 在 session_start()
之前被调用根据the session_set_save_handler manual page,论点是:
- $打开
- $关闭
- $阅读
- $写
- $销毁
- $gc
- (可选)$create_sid
- (可选)$validate_sid
- (可选)$update_timestamp
您提供的方法名称是:
- 'open'
- 'close'
- 'read'
- 'write'
- 'remove'
- 'gc'
- 'destroy'
所以会话“destroy”事件调用的方法是\CB\Session::remove
,\CB\Session::destroy
方法是为“create_sid”事件调用的。由于 create_sid 回调是在没有任何参数的情况下调用的,因此会出现您所看到的错误。
在你的问题开头你说:
I had to include destroy after upgrading to PHP 8.
由于您实际包含的是一个损坏的 create_sid 回调,无论您认为您正在解决的问题可能仍然需要解决,但那将是一个不同的问题。当前错误的解决方案是从代码中删除错误的 ['\CB\Session', 'destroy']
行。