ホームページ > バックエンド開発 > PHPチュートリアル > データベースを使用してPHPでセッションを保存する方法

データベースを使用してPHPでセッションを保存する方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-08-08 09:34:03
オリジナル
1089 人が閲覧しました

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 チュートリアルに興味のある友人の参考になれば幸いです。

  • 関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート