PHP はファイルの代わりに Redis を使用してセッションを保存します

墨辰丷
リリース: 2023-03-27 22:34:02
オリジナル
1772 人が閲覧しました

この記事では、PHP がファイルの代わりに Redis を使用してセッションを保存する方法を主に紹介し、セッションの基本的な操作方法と、Redis を使用してセッションを保存する関連テクニックをサンプルの形式で詳しく説明します。

この記事では、PHP がセッションのファイル ストレージの代わりに Redis を使用する例について説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

PHP はデフォルトでファイルを使用してセッションを保存します。同時実行の量が多い場合、効率は非常に低くなります。そして、

Redis は高い同時実行性を非常によくサポートしているため、ファイル ストレージ セッションの代わりに Redis を使用することができます

ここでは、PHPのsession_set_save_handler関数の機能と使い方を紹介します。この関数は、ユーザーレベルのセッション保存関数 (オープン、クローズ、書き込みなど) を定義します。

session_set_save_handler 函数的作用和使用方法。该函数定义用户级session保存函数(如打开、关闭、写入等)。

原型如下:

bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)プロトタイプは次のとおりです:

bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)

session_set_save_handler 関数のパラメータは次のとおりです。


🎜🎜
パラメータ 説明
open この関数は、セッションが開かれるときに呼び出されます。 2 つのパラメータを受け取ります。最初のパラメータはセッションを維持するためのパスであり、2 番目のパラメータはセッションの操作が完了したときに呼び出されます。パラメータを受け取りません。
read はパラメータとしてセッションIDを受け取ります。セッション ID を介してデータ保管パーティからデータを取得し、このデータを返します。データが空の場合は、空の文字列を返すことができます。この関数は
<span style="font-family:新宋体">session_start</span>write を呼び出す前にトリガーされ、データが保存されるときに呼び出されます。パラメータは 2 つあり、1 つはセッション ID、もう 1 つはセッション データです。
destroy destroy 関数は、<span style="font-family:新宋体">session_destroy</span> 関数が呼び出されたときにトリガーされます。パラメーターは 1 つだけですセッション ID
gc PHP がセッション ガベージ コレクション メカニズムを実行するときにトリガーされます


この関数を使用する前に、まず php.ini 設定の session.save_handler オプションを設定します。ファイルをユーザーに送信しないと、session_set_save_handle が有効になりません。

セッション管理クラス sessionManager.php を作成します。コードは次のとおりです:

<?php
class SessionManager{
 private $redis;
 private $sessionSavePath;
 private $sessionName;
 private $sessionExpireTime=30;//redis,session的过期时间为30s
 public function __construct(){
 $this->redis = new Redis();//创建phpredis实例
 $this->redis->connect(&#39;127.0.0.1&#39;,6379);//连接redis
 $this->redis->auth("107lab");//授权
 $retval = session_set_save_handler(
  array($this,"open"),
  array($this,"close"),
  array($this,"read"),
  array($this,"write"),
  array($this,"destroy"),
  array($this,"gc")
 );
 session_start();
 }
 public function open($path,$name){
 return true;
 }
 public function close(){
 return true;
 }
 public function read($id){
 $value = $this->redis->get($id);//获取redis中的指定记录
 if($value){
  return $value;
 }else{
  return &#39;&#39;;
 }
 }
 public function write($id,$data){
 if($this->redis->set($id,$data)){//以session ID为键,存储
  $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间
  return true;
 }
 return false;
 }
 public function destroy($id){
 if($this->redis->delete($id)){//删除redis中的指定记录
  return true;
 }
 return false;
 }
 public function gc($maxlifetime){
 return true;
 }
 public function __destruct(){
 session_write_close();
 }
}
ログイン後にコピー

SessionManager コンストラクターは主に Redis サーバーに接続するために使用され、session_set_save_handler 関数を使用してセッション コールバック関数を設定します。 session_start 関数を呼び出してセッション関数を有効にします。この例の open、close、および gc コールバック関数はあまり役に立たないため、直接 true を返します。

書き込みコールバック関数では、セッション ID をキーとして使用し、セッション データを値として Redis サーバーに保存し、セッションの有効期限を 30 秒に設定します。読み取りコールバック関数では、セッション ID をキーとして使用して、redis サーバーからデータを読み取り、このデータを返します。 destroy コールバック関数では、セッション ID をキーとして使用して、対応するセッション データを Redis サーバーから削除します。

使用するには、SessionManager クラスをインクルードし、SessionManager オブジェクトをインスタンス化するだけです。以下の session_set.php ファイルを作成します。コードを入力します

<?php
 include(&#39;SessionManager.php&#39;);
 new SessionManager();
 $_SESSION[&#39;username&#39;] = &#39;captain&#39;;
ログイン後にコピー

次に、session_get.php ファイルを作成し、次のコードを入力します:

<?php
 include(&#39;SessionManager.php&#39;);
 new SessionManager();
 echo $_SESSION[&#39;username&#39;];
ログイン後にコピー

テストする場合、最初に session_set.php にアクセスし、次に session_get.php にアクセスします。以下のように:

以下に示すように、redis データベースをもう一度確認してください

127.0.0.1:6379> keys *
1) "oe94eic337slnjv1bvlreoa574"
127.0.0.1:6379> get oe94eic337slnjv1bvlreoa574
"username|s:7:\"captain\";"
ログイン後にコピー

以上がこの記事の全内容です。皆様の学習に役立つことを願っています。


関連する推奨事項:

PHPでredisに存在しない6桁の乱数を取得する方法

PHP Weiboに投稿するためのredisメッセージキューを実装する方法

CIフレームワーク(CodeIgniter)操作redisステップ分析

以上がPHP はファイルの代わりに Redis を使用してセッションを保存しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!