php的session預設是儲存在伺服器端上,然而我們要刪除某人使用的session時,卻十分的有困難,所以我們將session寫入到mysql(DB),就可以刪除特定人員或是所有遠端的session。
首先,在MYSQL建立一個資料表mysession
DROP TABLE IF EXISTS `mysession`; CREATE TABLE `mysession` ( `session_key` char(32) NOT NULL, `session_data` text, `session_expiry` int(11) default NULL, PRIMARY KEY (`session_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然後建立一個 session.inc.php
<?php function mysession_open($save_path,$session_name){ $link=@mysql_connect("localhost","user","pw") or die("資料庫伺服器連接失敗"); @mysql_select_db("db") or die("資料庫伺服器連接失敗"); return true; } function mysession_close(){ return true; } function mysession_read($key){ $expiry_time = time(); //獲取Session時間 //執行SQL語句獲得Session的值 $query = @mysql_query("select session_data from mysession where session_key = '$key' and session_expiry > $expiry_time") or die("SQL語句執行失敗"); if($row = mysql_fetch_array($query)){ return $row['session_data']; }else{ return false; } } function mysession_write($key, $data){ $expiry_time = time() + 1440; //計算Session失效時間 //查詢Session的鍵值是否已經存在 $query = @mysql_query("select session_data from mysession where session_key = '$key'")or die("SQL語句執行失敗"); //如果不存在,則執行插入操作,否則執行更新操作 if(mysql_numrows($query) == 0){ //執行SQL語句插入Session的值 $query = @mysql_query("insert into mysession values('$key', '$data', $expiry_time)")or die("SQL語句執行失敗"); }else{ //執行SQL語句更新Session的值 $query = @mysql_query("update mysession set session_data = '$data', session_expiry = $expiry_time where session_key = '$key'")or die("SQL語句執行失敗"); } return $query; } function mysession_destroy($key){ //執行SQL語句刪除Session $query = @mysql_query("delete from mysession where session_key = '$key'")or die("SQL語句執行失敗"); return $query; } function mysession_gc($expiry_time){ $expiry_time = time(); //執行SQL語句刪除Session $query = @mysql_query("delete from mysession where session_expiry < $expiry_time")or die("SQL語句執行失敗"); return $query; } //設置垃圾回收最大生存時間 預設1440.1.100 ini_set('session.gc_maxlifetime', 1440); ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','1'); session_set_save_handler('mysession_open','mysession_close', 'mysession_read', 'mysession_write', 'mysession_destroy', 'mysession_gc'); ?>
在你要運用的session上的PHP並不需要更改什麼,只需要修改 session_start(); 為
<?php include('session.inc.php'); session_start(); ?>
即可。