чтение ввода / вывода сессионных переменных в конструкторе и деструкторе - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть страница, которая вызывается много раз в цикле. У меня есть версия, которая извлекает данные из 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;
    }
}

1 Ответ

0 голосов
/ 02 июля 2014

Вот мой [очень простой] обработчик сеанса.Примечание. 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;
}

Ссылки

...