PHP セッションはデフォルトでサーバー側にファイルとして保存され、クライアント側で変数を保存するために Cookie が使用されることがわかっています。これにより、セキュリティ上の理由からユーザーがブラウザの Cookie を閉じると、プログラム セッションが問題を引き起こします。に関連する操作は実行されません。したがって、セッション データをデータベースに保存できれば、クライアントの設定に制限されず、パフォーマンスと拡張性が飛躍的に向上します。プログラムで使用される主要な関数は session_set_save_handler であり、php.ini 内の session.save_handler = ファイルを user に変更する必要があります。ここで説明する環境は linux(freesd)+apache+MySQL+php です。
データテーブル構造: [セッション]
CREATE TABLE セッション (
sesskey char(32) が null ではありません、
expiry int(11) unsigned not null、
値のテキストが null ではありません、
主キー (sesskey)
);
プログラムコード: [session_inc.php]
$SESS_DBHOST = "あなたのホスト" /* データベースサーバーのホスト名 */
$SESS_DBNAME = "yourdb" /* データベース名 */
$SESS_DBUSER = "あなたのユーザー" /* データベース ユーザー */
$SESS_DBPASS = "yourpassWord" /* データベースのパスワード */
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
関数 sess_open($save_path, $session_name) {
グローバル $SESS_DBHOST、$SESS_DBNAME、$SESS_DBUSER、$SESS_DBPASS、$SESS_DBH
If (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "
$SESS_DBUSER として $SESS_DBHOST に接続できません";
echo "MySQL エラー: " . mysql_error();
死ぬ
}
If (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "データベース $SESS_DBNAME を選択できません";
死ぬ
}
true を返します。
}
関数 sess_close() {
true を返します。
}
関数 sess_read($key) {
グローバル $SESS_DBH、$SESS_LIFE
$qry = "sesskey = '$key' AND 有効期限から値を選択します
;
$qid = mysql_query($qry, $SESS_DBH);
If (list($value) = mysql_fetch_row($qid)) {
$value を返します。
}
false を返します。
}
関数 sess_write($key, $val) {
グローバル $SESS_DBH、$SESS_LIFE
$expiry = time() + $SESS_LIFE //有効期限
;
$value = ラッシュを追加します
$qry = "session_tbl 値に挿入 ('$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);
}
$qid を返します。
}
関数 sess_destroy($key) {
グローバル $SESS_DBH
$qry = "sesskey = '$key' から session_tbl から削除します
$qid = mysql_query($qry, $SESS_DBH);
$qid を返します。
}
関数 sess_gc($maxlifetime) {
グローバル $SESS_DBH
$qry = "session_tbl WHERE から削除 < " . time();
$qid = mysql_query($qry, $SESS_DBH);
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") を使用します。他のセッション関数は以前と同じ方法で呼び出されます。
以上、データベース保存セッションの内容も含めて、PHP データベースを使用してセッションを保存する方法を紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。