[英]save php session to db (session_set_save_handler)
我在一個網站上工作,我們需要對服務器進行群集,以使多台計算機處理流量。 因此,我需要將php會話(文件會話)轉換為db才能進行此群集工作。
我有一個簡單的登錄文件:檢查發布用戶==密碼,是否行數== 1:
$_SESSION['user']=$_POST['user'];
我的問題從這里開始,如何使用session_set_save_handler在數據庫中寫入此USER? 我需要更改以獲得_write工作嗎?
public function _write($id){
// Create time stamp
$data = time();
// Set query
$this->db->query('INSERT INTO sessions (id,user,data) VALUES (:id, :user, :data)');
// Bind data
$this->db->bind(':id', $id);
$this->db->bind(':user', $user); //how can i get login user?
$this->db->bind(':data', $data);
// Attempt Execution
// If successful
if($this->db->execute()){
// Return True
return true;
}
// Return False
return false;
}
D B
CREATE TABLE IF NOT EXISTS `sessions` (
`id` varchar(32) NOT NULL,
`user` varchar(20),
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
session_set_save_handler的write函數接受兩個參數:
function write(string $sessionId, string $data)
{
//$data = serialized presentation of your whole session, including 'user'
...
}
首先,您的_write
函數缺少第二個參數,在本例中$user
:
function _write($id,$user)
這就是您的數據( $_SESSION
數組的內容)所在的位置。 名稱$user
令人困惑,它只是$_SESSION
數組中包含的任何數據,因此最好使用$value
名稱。
另外,由於會話表中的ID應該是唯一的,因此如果已經存在這樣的會話,它可能不會成功。 因此,在這種情況下,您需要使用到期時間進行更新:
if($this->db->execute()){
return true;
}else{
$this->db->query('UPDATE sessions SET user=:user, data:data WHERE id=$id');
$this->db->bind(':access', $access);
$this->db->bind(':data', $data);
$this->db->execute();
}
至於時間,應該是到期時間,最好將其更改為:
$data = time()+ini_get("session.gc_maxlifetime");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.