Я получаю странную ошибку, которую я не видел раньше при использовании пользовательского обработчика сеансов в PHP (код ниже).Когда вызывается session_start (), я получаю предупреждение: отсутствует аргумент 2 для Session :: write () в строке 22 и переменная Notice: Undefined: данные в строке 25.
Строка 22 - открытая функция write ($id, $ data) и строка 25, где переменная данных используется чуть ниже.
Может кто-нибудь увидеть ошибку в моем коде?
Спасибо
class Session {
private $db;
private $expires_time;
public function __construct($database, $expires_time) {
$this->db = $database;
$this->expires_time = $expires_time;
}
public function open($path, $name) {
return true;
}
public function close() {
return true;
}
public function write($id, $data) {
$expires = time() + $this->expires_time;
$query = $this->db->prepare('REPLACE INTO sessions (id, data, expires) VALUES (:id, :data, :expires)');
return $query->execute(array(":id" => $id, ":data" => $data, ":expires" => $expires));
}
public function read($id) {
$query = $this->db->prepare('SELECT data FROM sessions WHERE id = :id AND expires > :expires LIMIT 1');
$query->execute(array(':id' => $id, ':expires' => time()));
if($session = $query->fetch()) {
return $session['data'];
}
return '';
}
public function destroy($id) {
$query = $this->db->prepare('DELETE FROM sessions WHERE id = :id');
return $query->execute(array(':id', $id));
}
public function clean($max) {
$query = $this->db->prepare('DELETE FROM sessions WHERE expires < :expires');
return $query->execute(array(':expires', $max));
}
}
Иследующий код создает объект и устанавливает обработчик сохранения сеанса.
$sess_expires_time = 3600;
$session = new Session($_DATABASE, $sess_expires_time);
session_set_save_handler(
array($session, '_open'),
array($session, '_close'),
array($session, '_write'),
array($session, '_read'),
array($session, '_destroy'),
array($session, '_clean')
);
session_start();