【php】把session寫入Database(mysql) / 教學 / 免空可用

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){
	[email protected]_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();
?>

 

即可。