php中將session保存到數據庫的代碼

cxx3 9年前發布 | 845 次閱讀 PHP

我們可以使用session_set_save_handler()來注冊連接數據的函數。下面是完整的演示代碼

<?php
//
// 'sessions' table schema
// create table sessions (
//   session_id char(32) not null,
//   session_data text not null,
//   session_expiration int(11) unsigned not null,
//   primary key (session_id));
//

include_once 'DB.php';

// Global Variables $dbh = NULL;

function on_session_start ($save_path, $session_name) { global $dbh; $dbh = DB::connect('mysql://user:secret@localhost/SITE_SESSIONS', true);

if (DB::isError($dbh)) {
    die(sprintf('Error [%d]: %s',
                $dbh->getCode(), $dbh->getMessage()));
}

}

function on_session_end () { // Nothing needs to be done in this function // since we used persistent connection. }

function on_session_read ($key) { global $dbh;

$stmt = "select session_data from sessions";
$stmt .= " where session_id = '$key'";
$stmt .= " and session_expiration > now()";

$sth = $dbh->query($sth);
$row = $sth->fetchRow(DB_FETCHMODE_ASSOC);
return $row['session_data'];

}

function on_session_write ($key, $val) { global $dbh;

$val = addslashes($val);

$insert_stmt = "insert into sessions values('$key', '$val', now() + 3600)";
$update_stmt = "update sessions set session_data = '$val', ";
$update_stmt .= "session_expiration = now() + 3600 ";
$update_stmt .= "where session_id = '$key'";

// First we try to insert, if that doesn't succeed, it means
// session is already in the table and we try to update
if (DB::isError($dbh->query($insert_stmt)))
    $dbh->query($update_stmt);

}

function on_session_destroy ($key) { global $dbh;

$stmt = "delete from sessions where session_id = '$key'"; $dbh->query($stmt); }

function on_session_gc ($max_lifetime) { global $dbh;

// In this example, we don't use $max_lifetime parameter
// We simply delete all sessions that have expired
$stmt = "delete from sessions where session_expiration < now()";
$dbh->query($stmt);

}

session_start ();

// Register the $counter variable as part // of the session session_register ("counter");

// Set the save handlers session_set_save_handler ("on_session_start", "on_session_end", "on_session_read", "on_session_write", "on_session_destroy", "on_session_gc");

// Let's see what it does $counter++; print $counter; session_destroy(); ?></pre>

 本文由用戶 cxx3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!