我写了一些函数来处理mysql中的php会话。
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方法。但是,数据库不再具有该会话的ID,因此永远找不到该会话。我的问题是php从哪里获取会话ID,以及如何强制write方法运行或重新生成会话ID。