session入庫,phpsession入庫
session_set_save_handler(callback open,callback close,callback read,call write,callback destroy,callback gc)
各個參數的的執行時機以及使用說明
回呼函數 |
描述 |
open() |
在運行session_start()時執行,該函數的聲明需要兩個參數,系統會自動的將php.ini中session.save_path選項值傳遞給第一個參數,將session名自動的傳遞到第二個參數中,返回true則繼續往下執行 |
close() |
該函數不需要參數,在指令碼執行完成或調用session_write_close(),session_destroy()時被執行,即在所有session操作完成後被執行,如果不需要處理直接返回true |
read() |
在運行session_start()時執行,因為在開啟會話時,會去read當前的session資料並且寫入$_SESSION變數。需要聲明一個參數,系統會自動的將SessionId傳遞給該函數,用於通過sessionId擷取對應的使用者資料,返回當前的使用者資料寫入$_SESSION資料 |
write() |
該函數在指令碼結束和對$_SESSION變數賦值時執行,需要聲明兩個參數,分別是sessionid和序列化後session資訊字串,在對$_SESSION變數賦值時,就可以通過Sessionid找到儲存位置,並且將資訊寫入,儲存成功可以返回true繼續向下執行 |
destroy() |
在運行session_destroy時執行,需要聲明一個參數,系統會自動將sessionId傳遞給該函數,去除對應的回話資訊 |
gc() |
記憶體回收程式啟動時執行。需要聲明一個參數,系統自動將php.ini中 session.gc_maxlifetime選項的值傳遞給該函數,使用者刪除超過這個時間的session資訊,返回true可以繼續向下執行 |
Session入庫就是將session的資訊儲存到表中,需要設定session.save_handler = user
建立session表
DROP TABLE IF EXISTS `session`;
CREATE TABLE `session` (
`sid` char(32) NOT NULL,
`update_time` int(11) default NULL,
`data` text,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
需要儲存 sessionid ,更新時間,格式化資料
然後寫功能性代碼:
<?php
$link=mysql_connect("127.0.0.1","root","root");
mysql_select_db("session");
mysql_query("set names utf8");
function open($save_path,$session_name){
return true;
}
function close(){
return true;
}
function read($sid){
/*通過sid先從資料庫中尋找目前使用者的資訊*/
$sql="select * from session where sid='$sid'";
//echo $sql;
$re=mysql_query($sql);
/*如果沒有結果返回Null 字元串給$_SESSION變數*/
if(!$result=mysql_fetch_array($re)){
return "";
}
/*如果有資料返回結果*/
return $result["data"];
}
function write($sid,$data){
/*每次寫之前先從資料庫中擷取一下是否已經存在該使用者的session資訊*/
$sql="select * from session where sid='$sid'";
$re=mysql_query($sql);
$time=time();
/*如果存在該使用者的資訊則去修改,如果不存在要重新添加一行資料*/
if($result=mysql_fetch_array($re)){
//存在的情況
$sql1="update session set update_time='$time',data='$data' where sid='$sid'";
mysql_query($sql1);
}else{
//不存在的情況
if(!empty($data)){
$sql1="insert into session(sid,update_time,data) values('$sid','$time','$data')";
$sth1=mysql_query($sql1);
}
}
return true;
}
function destroy($sid){
//通過sessionid來刪除目前使用者的記錄
$sql="delete from session where sid='$sid'";
mysql_query($sql);
return true;
}
function gc($maxfiletime){
//通過sessionid來刪除目前使用者的記錄
$sql="delete * from session where update_time<$maxfiletime";
mysql_query($sql);
return true;
}
session_set_save_handler("open","close","read","write","destroy","gc");
session_start();
?>