【问题标题】:reading I/O of session variables in constructor and destructor在构造函数和析构函数中读取会话变量的 I/O
【发布时间】:2011-11-21 11:32:59
【问题描述】:

我有一个在循环中被多次调用的页面。我有一个版本,它在页面加载时从 MySQL 中提取数据,在页面再次重复该过程之前,每次提交都将修改后的数据推回。其中一些数据仅对会话的运行很重要,在会话结束时被转储

我正在玩一个类的想法,该类从构造函数中的会话变量加载其变量,然后将最终值推回析构函数中的相同会话变量。我有以下内容。变量在第一次调用构造函数时成功初始化,并由析构函数的第一个实例传递出去。但是,它们无法在第二次调用构造函数时加载。我错过了什么吗?

提前致谢

class counters
{
    protected $qCounters;

    function __construct()
    {
    $this->qCounters = $_SESSION['q']['counters'];
    }

    // process happen here to alter values

    function __destruct()
    {
    $_SESSION['q']['counters'] = $this->qCounters;
    }
}

【问题讨论】:

  • 我认为你最好只在此处对会话进行建模,然后添加方法以添加到特定的计数器字段,而不是尝试对计数器本身进行建模。
  • 等等。 . .你在一个循环中多次调用一个页面。 . ?听起来。 . .可怕。为什么,你为什么要这样做?
  • 为什么这么糟糕?在这种情况下,它可以很好地解决复杂问题
  • 对于遇到相同问题的任何人,请查看以下内容。即使在具有复杂继承的类结构中也可以使用。 objectmix.com/php/…

标签: php debugging constructor session-variables destructor


【解决方案1】:

这是我的 [非常简单的] 会话处理程序。注意 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;
}

参考文献

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 2016-09-09
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2010-12-16
    • 2020-07-15
    相关资源
    最近更新 更多