Php 读取构造函数和析构函数中会话变量的I/O
我有一个在循环中多次被调用的页面。我有一个版本,在页面加载时从MySQL中提取数据,在页面再次重复该过程之前,每次提交时都会将修改后的数据推回。其中一些数据仅对会话的运行很重要,在会话结束时转储 我在玩一个类的想法,这个类从构造函数中的会话变量加载它的变量,然后将最终值推回到析构函数中的相同会话变量。我有一些大致如下的东西。变量在第一次调用构造函数时被成功初始化,并由析构函数的第一个实例传递出去。但是,在第二次调用构造函数时无法加载它们。我错过什么了吗 提前谢谢Php 读取构造函数和析构函数中会话变量的I/O,php,debugging,constructor,session-variables,destructor,Php,Debugging,Constructor,Session Variables,Destructor,我有一个在循环中多次被调用的页面。我有一个版本,在页面加载时从MySQL中提取数据,在页面再次重复该过程之前,每次提交时都会将修改后的数据推回。其中一些数据仅对会话的运行很重要,在会话结束时转储 我在玩一个类的想法,这个类从构造函数中的会话变量加载它的变量,然后将最终值推回到析构函数中的相同会话变量。我有一些大致如下的东西。变量在第一次调用构造函数时被成功初始化,并由析构函数的第一个实例传递出去。但是,在第二次调用构造函数时无法加载它们。我错过什么了吗 提前谢谢 class counters {
class counters
{
protected $qCounters;
function __construct()
{
$this->qCounters = $_SESSION['q']['counters'];
}
// process happen here to alter values
function __destruct()
{
$_SESSION['q']['counters'] = $this->qCounters;
}
}
下面是我的[非常简单的]会话处理程序。注意db_query()是mysqli_query()的一个简单包装器,在内部处理所有连接细节
参考资料
function session_close() {
return true;
}
function session_die($id) {
db_query("DELETE FROM session WHERE ID='$id'");
return true;
}
function session_gc($maxlifetime) {
return true;
}
function session_open($path,$name) {
return true;
}
function session_read($id) {
$dchk = db_query("SELECT data FROM session WHERE ID='$id'");
if(db_numrows($dchk) == 1) {
if(!isset($_SESSION['row'])) { $_SESSION['row'] = 1; }
list($data) = db_rows($dchk);
return base64_decode($data);
} else {
return "";
}
db_free($dchk);
return true;
}
function session_write($id,$data) {
global $visitor;
$data = base64_encode($data);
if(!isset($_SESSION['row'])) {
db_query("INSERT IGNORE INTO session (ID,data,accessed) VALUES('$id','$data',UNIX_TIMESTAMP(NOW()))");
} else {
db_query("UPDATE session SET data='$data',accessed=UNIX_TIMESTAMP(NOW()) WHERE ID='$id'");
}
return true;
}