PHP のセッションはデフォルトでサーバー側にファイルとして保存され、クライアント側で変数を保存するために Cookie が使用されます。これにより、ユーザーが何らかのセキュリティ上の理由でブラウザの Cookie をオフにすると、セッション関連の問題が発生します。プログラム内の操作は実行されません。したがって、セッション データをデータベースに保存できれば、クライアントの設定に制限されず、パフォーマンスと拡張性が飛躍的に向上します。プログラムで使用される主要な関数は session_set_save_handler であり、php.ini 内の session.save_handler = ファイルを user に変更する必要があります。ここで説明する環境は linux(freesd)+apache+mysql+php です。
データテーブル構造: [セッション]
CREATE TABLE セッション (
sesskey char(32) not null、
expiry int(11) unsigned not null、
value text not null、
PRIMARY KEY (sesskey)
);プログラムコード: [session_inc.php]
$SESS_DBHOST = "yourhost"; /* データベースサーバーのホスト名 */
$SESS_DBNAME = "yourdb"; /* データベース名 */
$SESS_DBUSER = "youruser"; /* データベース ユーザー */
$SESS_DBPASS = "パスワード"; /* データベース パスワード */
$SESS_DBH = ""
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;
if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "
Can' t connect to $SESS_DBHOST as $SESS_DBUSER";
echo "MySQL エラー: " . mysql_error();
}
if (! mysql_select_db($SESS_DBNAME, $ SESS_DBH)) {
echo " ) {
global $SESS_DBH, $SESS_LIFE;
$qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry >
$qid = mysql_query($qry, $SESS_DBH);
if (list($ value) = mysql_fetch_row($qid)) {
$expiry = time () + $SESS_LIFE; // 有効期限
$value = addlashes($val);
$qry = "session_tbl 値に挿入 ('$key', $expiry, '$value')";
$qid = mysql_query($qry, $SESS_DBH); $qid) {
$qry = "UPDATE session_tbl SET 期限切れ = $expiry, 値 = '$value' WHERE sesskey = '$key' AND 期限切れ >
$qid = mysql_query($qry, $); SESS_DBH);
}
return $qid;
function sess_destroy($key) {
global $SESS_DBH = "DELETE FROM session_tbl = '$key' ";
$qid = mysql_query ($qry, $SESS_DBH);
return $qid;
function sess_gc($maxlifetime) {
global $SESS_DBH; $qry = " session_tbl WHERE < " . $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();
?>
上記の手順を完了した後、プログラム内で session_start() の代わりに require("session_inc.php" ) を使用しても、他のセッション関数は引き続き呼び出されます。前と同じように。
【この記事の著作権は著者とOso.comが共有しています。転載する場合は著者と出典を明記してください】
http://www.bkjia.com/PHPjc/316872.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/316872.html技術記事 PHPのセッションはデフォルトでサーバー側にファイルとして保存され、クライアント側で変数を保存するためにCookieが使用されます。これにより、セキュリティ上の理由によりユーザーがセッションを閉じるときに問題が発生します...
。