gpt4 book ai didi

php - 将带有回调的 session 从 php4 迁移到 php5 的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 07:06:22 25 4
gpt4 key购买 nike

我必须迁移一个使用 session_set_save_handler() 的 php4 应用程序到 php5。

在 php4 中一切正常,但在 php5 中,回调函数无法再访问全局变量,这些变量是在 session_set_save_handler() 之前在页面上设置的。被称为。

在下面的示例中,无法在 session_writer() 中访问全局变量 $g1 (作为回调函数传递)

对于这种行为是否有一些解释,或者您能否提供有关将带有回调的 session 从 php4 迁移到 5 的提示?

这是伪代码:

function session_writer($id,$vars) {
global $g1;
echo "g1 not defined here: ".is_object($g1);
}

global $g1;
$g1 = SomeObject(); //which is the DB connection for the session writer

session_set_save_handler($o,$c,$r,"session_writer",$d,$g);
session_start();

最佳答案

这实际上是在 documentation 中注明的。 :

As of PHP 5.0.5 the write and close handlers are called after object destruction and therefore cannot use objects or throw exceptions. The object destructors can however use sessions.

It is possible to call session_write_close() from the destructor to solve this chicken and egg problem.


基本上,您必须调用 session_write_close()来自您的 SomeObject 的析构函数,或者,执行以下操作:
<?php register_shutdown_function("session_write_close"); ?>
这些解决方案中的任何一个都应该在销毁所有对象之前强制写入和关闭 session ,从而允许您保留原始回调函数。

关于php - 将带有回调的 session 从 php4 迁移到 php5 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com