我正在使用PHP 5.4.12
我有两个班级
<?php
class MySessionHandler implements SessionHandlerInterface {
//..
}
$handler = new MySessionHandler();
session_set_save_handler($handler,true);
?>
和
<?php
class MySession {
//..
function __destruct() {
session_write_close();
echo 'called';
}
}
使用此代码,MySession的析构函数永远不会被调用。
<?php
require_once 'MySessionHandler.php';
include_once 'MySession.php';
$test = new MySession();
但是使用这段代码,“MySession”析构函数被称为ok
<?php
require_once 'MySessionHandler.php';
include_once 'MySession.php';
class Test {
function __construct() {
$test = new MySession();
}
}
$obj = new Test();
我测试了session_set_save_handler($ handler,true / false)。 我需要调用MySession的析构函数,因为我遇到了session_write_close();我必须明确地调用它,否则会话永远不会被写入服务器。
有关此问题的任何解决方法吗?我已经将代码简化为它们的根,但是__destruct方法在应该的时候不会被调用。
答案 0 :(得分:3)
不依赖于__destruct
... From the manual:
当使用对象作为会话保存处理程序时,使用PHP注册shutdown函数非常重要,以避免PHP内部在关闭时内部销毁对象的方式产生意外的副作用,并可能阻止调用write和close。通常,您应该使用register_shutdown_function()函数注册'session_write_close'。
答案 1 :(得分:1)
在上面的例子中,您需要实例化对象:
$test = new MySession();