php用户自定义存储session的类在5.4下的兼容问题

最近把php版本从5.2升级到5.4,结果以前写的自定义存储session的类抛出以下错误

Warning: Invalid callback MemacheSession::write, class 'MemacheSession' not found in Unknown on line 0

Warning: Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

Warning: Invalid callback MemacheSession::close, class 'MemacheSession' not found in Unknown on line 0

经查,是因为5.4更改了session存储的机制,新增了SessionHandlerInterface 接口用来帮助用户实现自定义存储session的类,对于5.4之前的没有用到这个接口的类,有一个解决办法,就是注册 shutdown 回调函数来规避风险,通常可以通过调用 register_shutdown_function() 函数 来注册 'session_write_close' 回调函数

为了兼容之前的代码,在session类文件的开头加如下代码

if (function_exists('session_register_shutdown'))
{
       session_register_shutdown();
}
else
{
       register_shutdown_function('session_write_close');
}

 

参考信息如下

http://cn2.php.net/manual/zh/function.session-set-save-handler.php

此条目发表在未分类分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注