Я написал некоторую функцию для работы с сессиями php в mysql.
function __construct() {
parent::__construct();
// Set handler to overide SESSION
session_set_save_handler(
array($this, "_open"),
array($this, "_close"),
array($this, "_read"),
array($this, "_write"),
array($this, "_destroy"),
array($this, "_gc")
);
session_start();
}
public function _read($id){
//print("reading");
$id=$this->sanitary_string($id);
$sql="SELECT * FROM session WHERE session_id=".$id;
...
public function _write($id, $data){
//print("writing");
$w=array();
$r=array();
$w["id"]=$id;
$w["data"]=$_SESSION["mid"];
$w["date"]=date("Y-m-d G:i:s");
if($w["data"]<>0){
$r=$this->sanitary_string($w);
$sql="INSERT INTO session (mid,session_id,datetime) VALUES (".$r["data"].",".$r["id"].",".$r["date"].")";
$sql=$sql." ON DUPLICATE KEY UPDATE datetime=".$r["date"];
У меня проблема в том, что при создании нового экземпляра класса сеанса запускается метод _read. Однако в базе данных больше нет идентификатора для этого сеанса, поэтому сеанс никогда не найден. Мой вопрос заключается в том, откуда php получает идентификатор сеанса и как заставить метод write запустить или восстановить идентификатор сеанса.