php - session_start() 在 PHP 8 中为 session_destroy() 提供错误
问题描述
突然之间,我的自定义会话处理程序的 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,而 Session.php 中预期正好为 1:堆栈跟踪:#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() 之前被调用
解决方案
根据session_set_save_handler 手册页,参数是:
- $开放
- $关闭
- $读
- $写
- $销毁
- $gc
- (可选)$create_sid
- (可选)$validate_sid
- (可选)$update_timestamp
您提供的方法名称是:
- '打开'
- '关'
- '读'
- '写'
- '消除'
- 'GC'
- '破坏'
因此,会话“destroy”事件调用的方法是\CB\Session::remove
,并且该\CB\Session::destroy
方法被“create_sid”事件调用。由于 create_sid 回调是在没有任何参数的情况下调用的,因此这会给您带来您所看到的错误。
在您的问题开始时,您说:
升级到 PHP 8 后,我必须包括销毁。
由于您实际上包含的是一个损坏的 create_sid 回调,因此您认为您正在解决的任何问题可能仍然需要解决,但这将是一个不同的问题。当前错误的解决方案是['\CB\Session', 'destroy']
从代码中删除错误行。
推荐阅读
- json - Firebase 通知在我自己的设备上不起作用
- c# - 使用 IClientModelValidator 在 ASP.NET Core 中使用参数自定义客户端验证属性
- android - 在 Android 中实现自定义日视图
- flutter - Flutter Theme FlatButton textColor in ButtonBar
- vala - Vala:在构造函数中调用超类创建方法
- javascript - 在 React / Redux 中,如何在 componentDidMount 中调用两次相同的 fetch,设置 2 个状态变量和结果
- javascript - JavaScript 更改元素上的类以用于级联下拉列表
- c - 在 C++ 模式下将“c”输入视为“c++”
- c - c中运算符的地址和L值
- reactjs - React-router4 在组件中显示名称