QUOTE: |
CREATE DATABASE sessions CREATE TABLE sessions ( sesskey char(32) PRIMARY KEY, expiry int NOT NULL, alue text NOT NULL) |
QUOTE: |
require_once("DB.php"); $SESS_DBHOST = "localhost"; /*資料庫伺服器主機名*/ $SESS_DBNAME = "sessions"; /* 資料庫名 */ $SESS_DBUSER = "kycman"; /* 資料庫用戶 */ $SESS_DBPASS = "kycman"; /* 資料庫口令 */ $SESS_DBH = ""; $SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); function sess_open($save_path, $session_name) { global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH; $dns="pgsql://$SESS_DBUSER:$SESS_DBPASS@$SESS_DBHOST/$SESS_DBNAME"; $SESS_DBH=DB::connect($dns); if (DB::isError($SESS_DBH)) { die($SESS_DBH->getMessage()); } return true; } function sess_close() { $SESS_DBH->disconnect(); return true; } function sess_read($key) { global $SESS_DBH, $SESS_LIFE; $qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time(); $qid = $SESS_DBH->query($qry); if (list($value) = $qid->fetchRow()) { return $value; } return false; } function sess_write($key, $val) { global $SESS_DBH, $SESS_LIFE; $expiry = time() + $SESS_LIFE; $value = addslashes($val); $qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')"; $qid = $SESS_DBH->query($qry); if (!DB::isError($qid)) { $qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time(); $qid = $SESS_DBH->query($qry); } return $qid; } function sess_destroy($key) { global $SESS_DBH; $qry = "DELETE FROM sessions WHERE sesskey = '$key'"; $qid = $SESS_DBH->query($qry); return $qid; } function sess_gc($maxlifetime) { global $SESS_DBH; $qry = "DELETE FROM sessions WHERE expiry < " . time(); $qid = $SESS_DBH->query($qry); return $SESS_DBH->affectedRows(); } session_set_save_handler("sess_open","sess_close", "sess_read","sess_write", "sess_destroy","sess_gc"); ?> |
[火星人 ] Linux下Web服務基於資料庫的會話管理已經有298次圍觀