使用資料庫儲存session的方法 (轉)
使用資料庫儲存session的方法 (轉)[@more@]作者:?member_id=3584">liuphy 發表日期:2000年12月20日 閱讀次數:98
【本文版權歸作者與奧索網共同擁有,如需轉載,請註明作者及出處】
php的session預設是以方式儲存在端,並且在客戶端使用cookie儲存變數,這就會出現一個問題,當一個由於某種原因關閉了的cookie,中的session相關操作將無法。因此,如果能以儲存session資料,將不受客戶端設定的限制,並且在和擴充套件性等方面有一個飛躍。程式中使用關鍵是session_set_save_handler,同時要將php.ini裡的session.save_handler = files 改為 user。這裡我們討論的環境是(freesd)++my+php。
資料表結構:[sessions]
CREATE TABLE sessions (
sesskey char(32) not null,
expiry int(11) unsigned not null,
value text not null,
PRIMARY KEY (sesskey)
);
程式程式碼:[session_inc.php]
$SESS_HOST = "yourhost"; /* database server hostname */
$SESS_DBNAME = "yourdb"; /* database name */
$SESS_DBUSER = "youruser"; /* database user */
$SESS_DBPASS = "yourpass"; /* database password */
$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;
if (! $SESS_DBH = _pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "Can't connect to $SESS_DBHOST as $SESS_DBUSER";
echo " MySQL Error: " . mysql_error();
die;
}
if (! mysql__db($SESS_DBNAME, $SESS_DBH)) {
echo " Unable to select database $SESS_DBNAME";
die;
}
return true;
}
function sess_close() {
return true;
}
function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;
$qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
if (list($value) = mysql_fetch_row($qid)) {
return $value;
}
return false;
}
function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;
$expiry = time() + $SESS_LIFE; //過期時間
$value = addslashes($val);
$qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')";
$qid = mysql_query($qry, $SESS_DBH);
if (! $qid) {
$qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
}
return $qid;
}
function sess_destroy($key) {
global $SESS_DBH;
$qry = "DELETE FROM session_tbl WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);
return $qid;
}
function sess_gc($maxlifetime) {
global $SESS_DBH;
$qry = "DELETE FROM session_tbl WHERE expiry $qid = mysql_query($qry, $SESS_DBH);
return mysql_affected_rows($SESS_DBH);
}
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
session_start();
?>
完成以上步驟後,在程式中使用require("session_inc.php")來代替session_start()即可,其他的session函式還是象以前一樣的方法。
?php>
【本文版權歸作者與奧索網共同擁有,如需轉載,請註明作者及出處】
說明:有利於使用者線上交流,並統計線上人數
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL資料庫MyISAM儲存引擎轉為Innodb的方法MySql資料庫儲存引擎
- MySQL資料庫的儲存引擎(轉)MySql資料庫儲存引擎
- 使用Room持久庫儲存資料OOM
- 有效儲存資料的方法
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- 層次結構資料的資料庫儲存和使用資料庫
- Session儲存到指定資料庫中Session資料庫
- 列式儲存資料庫資料庫
- MySQL儲存毫秒資料的方法MySql
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 使用自動儲存管理 (ASM)建立資料庫ASM資料庫
- sql server資料庫如何儲存陣列,int[]float[]double[]陣列儲存到資料庫方法SQLServer資料庫陣列
- MySQL 資料庫儲存引擎MySql資料庫儲存引擎
- 資料庫儲存過程資料庫儲存過程
- 在關聯式資料庫中儲存RDF (轉)資料庫
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- 使用儲存指令碼還原恢復資料庫指令碼資料庫
- 什麼時候該使用NoSQL儲存資料庫?SQL資料庫
- matlab 迴圈中使用的儲存資料方法 #更新中Matlab
- 報表資料分庫儲存
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- gitlab資料庫儲存位置Gitlab資料庫
- 管理資料庫儲存結構資料庫
- 儲存與資料庫系統資料庫
- JavaScript使用localStorage儲存資料JavaScript
- pgsql資料庫的表儲存策略原理SQL資料庫
- Sqlserver資料庫儲存路徑的修改SQLServer資料庫
- 明解資料庫------資料庫儲存演變史資料庫
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 【Android】資料儲存(三) 資料庫(SQLite)Android資料庫SQLite
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫