PHPでのセッションデータベースストレージインスタンスの詳細説明

伊谢尔伦
リリース: 2023-03-07 17:12:01
オリジナル
2549 人が閲覧しました

セッション ストレージ フォルダーを変更すると、セッションが一時フォルダーをいっぱいにしてサイトがクラッシュするのを防ぐことができますが、大規模な Web サイトに 1 日に 1,000 人がログインし、1 か月に 30,000 人がログインすると、30,000 人がログインすると計算できます。ただし、現時点では、セッション データベース ストレージ ( session_set_save_handle()) に適用する必要があります。 PHPの関数。構文形式は次のとおりです:

session_set_save_handle(open, close, read, write, destroy,gc);
ログイン後にコピー
session_set_save_handle() 関数パラメータの説明は次のとおりです:

パラメータ open(save_path, session_name)close()read(key)write(key, data)Destroy (Key) gc (expiRY_TIME) 変数を使用する直接ですが、これ 関数内のパラメータは6つの関数であり、呼び出されるときは関数名の文字列のみが呼び出されます。これらのパラメーターは以下で個別に紹介され、最後にこれらの関数はクラスにカプセル化されます。
説明
セッションストアのアドレスを検索、変数名を取得
パラメータは必要ありません、データベースを閉じます
セッションキーの値を読み取り、キーはsession_idに対応します
where data 対応して SESSION 変数を設定します
セッションキーに対応するセッションをログアウトします
期限切れのセッションレコードをクリアします

(1) データベースに接続するための

session_open()

関数をカプセル化します。 コード形式は次のとおりです。

<?php
  function session_open($save_path,$session_name)
  {
     //连接 mysql 数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 判断数据库是否成功
     if(!$handle)
     {
        die(&#39;打开数据库失败&#39;);
     }
  }
?>
ログイン後にコピー
注: 上記のコードでは、2 つのパラメーター $save_path と $session_name は使用されていません。これら 2 つのパラメータは削除されますが、これら 2 つの変数は一般的に使用されるため、友人には 2 つのパラメータを入力したままにすることをお勧めします。

(2)

session_close()

関数をカプセル化し、データベース接続を閉じます。 コード形式は次のとおりです。

<?php
  function session_close()
  {
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     mysqli_close($handle);
     return(true);
  }
?>
ログイン後にコピー
説明: この関数にはパラメーターは必要ないため、セッションがデータベースに保存されているか、ファイルでは true を返すだけです。 ただし、MYSQL データベースの場合は、将来問題が発生しないようにデータベースを閉じることが最善です。

(3)

session_read()

関数をカプセル化し、関数に現在時刻の UNIX タイムスタンプを設定し、$key 値に基づいてセッション名とコンテンツを検索します。 コード例は次のとおりです。 命令はデータベースに保存されます session_expiry は UNIX タイムスタンプです。

(4)

session_write()

関数をカプセル化します。セッションの有効期限が関数内に設定され、セッション名とコンテンツが見つかります。クエリ結果が空の場合、現在のページのセッションは session_id、session_name、および有効期限に基づいてデータベースに挿入されます。クエリ結果が空でない場合、データベース内のセッション ストレージ情報は $ に基づいて変更されます。 key と実行結果が返されます。 コード例は次のとおりです。

<?php
  function session_read($key)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     //设定当前时间
     $time = time();
     $sql = "select session_date from tb_session where session_key=&#39;$key&#39;and session_time>$time ";
     $result = mysqli_query($handle,$sql);
     $row = mysqli_fetch_array($result);
     if($row)
     {   //返回 Session 名称和内容
        return($row[&#39;session_date&#39;]);
     }else{
        return(false);
     }
  }
?>
ログイン後にコピー
(5) は session_destroy()

関数をカプセル化し、$key の値に従ってデータベース内のセッションを削除します。 コードは次のとおりです。 :

<?php
  function session_write($key,$data)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     //设定失效时间
     $time = 60*60;
     // 得到 UNIX 时间戳
     $lapse_time = time() + $time;
     $sql = "select session_date from tb_session where session_key=&#39;$key&#39;and session_time>$lapse_time ";
     $result = mysqli_query($handle,$sql);
     if(mysqli_num_rows($result) == 0)  // 没有结果
     {    //插入数据库SQL语句
        $sql = "insert into tb_session values (&#39;$key&#39;,&#39;$data&#39;,$lapse_time)";
        $result = mysqli_query($handle,$sql);
     }else{
        // 修改数据库SQL语句
        $sql = "update tb_session set session_key=&#39;$key&#39;, sessoin_data=&#39;$data&#39;, session_time=$lapse_time where session_key=&#39;$key&#39; ";
        $result = mysqli_query($handle,$sql);
     }
     return($result);
  }
?>
ログイン後にコピー
(6) は、指定された有効期限が期限切れのセッションを削除することに基づいて、 session_gc()

関数をカプセル化します。コードは次のように示されます:

<?php
  function session_destroy($key)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 删除 Session 的 SQL 语句
     $sql = "delete from tb_session where session_key=&#39;$key&#39;";
     $result = mysqli_query($handle,$sql);
     return($result);
  }
?>
ログイン後にコピー
上記は、session_set_save_handler の 6 つのパラメーター (関数) です。 () 関数。

以下では関数

session_set_save_handler()

を使用してセッション ストレージ データベースを実装します。実装コードは次のとおりです:

<?php
  function session_gc($expiry_time)
  {
     //连接数据库
     $handle = mysqli_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;,&#39;db_test&#39;);
     // 将参数$expiry_time 赋值为当前时间戳
     $lapse_time = time();
     // 删除 Session 的 SQL 语句
     $sql = "delete from tb_session where expiry_time<$lapse_time";
     $result = mysqli_query($handle,$sql);
     return($result);
  }
?>
ログイン後にコピー

以上がPHPでのセッションデータベースストレージインスタンスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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