ホームページ  >  記事  >  データベース  >  Redis を使用してユーザー セッションを保存する方法の詳細な説明

Redis を使用してユーザー セッションを保存する方法の詳細な説明

coldplay.xixi
coldplay.xixi転載
2020-07-30 10:57:043177ブラウズ

Redis を使用してユーザー セッションを保存する方法の詳細な説明

まえがき

PHP の組み込みの絵画保存メカニズムすべてのセッション データをサーバー上のテキスト ファイルに保存します。これらのファイルは通常、サーバー上の一時ディレクトリに保存されます。同時実行の量が多い場合、読み取りおよび書き込みの効率は非常に低くなります。 Redis は高い同時実行性を非常に適切にサポートしているため、Redis を使用してファイル ストレージ セッションを置き換えることができます。

関連トピックの推奨事項: php セッション (画像、テキスト、ビデオ、ケースを含む)

# #session_set_save_handler function

PHP の session_set_save_handler 関数は、ユーザーレベルのセッション保存関数 (開く、閉じる、書き込みなど) を定義するために使用されます。プロトタイプは次のとおりです。

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

# #ParameterDescriptionopenこの関数は、セッションが開かれるときに呼び出されます。 2 つのパラメータを受け取ります。最初のパラメータはセッションを保存するパスで、2 番目のパラメータはセッションの名前です。このコールバック関数は、操作が成功した場合は TRUE を返し、それ以外の場合は FALSE を返します。 closeこの関数は、セッション操作が完了すると呼び出されます。パラメータを受け取りません。このコールバック関数は、操作が成功した場合は TRUE を返し、それ以外の場合は FALSE を返します。 #readwritedestroygc
はセッション ID をパラメータとして受け取ります。セッション ID を介してデータ保管パーティからデータを取得し、このデータを返します。データが空の場合は、空の文字列を返すことができます。この関数は session_start
データの保存時に呼び出される前にトリガーされます。パラメータは 2 つあり、1 つはセッション ID、もう 1 つはセッション データです。
destroy 関数は、session_destroy 関数が呼び出されたときにトリガーされます。パラメータはセッション ID のみです。このコールバック関数は、操作が成功した場合は TRUE を返し、そうでない場合は FALSE を返します。
PHP がセッション ガベージ コレクション メカニズムを実行するときにトリガーされます。このコールバック関数は、操作が成功した場合は TRUE を返し、そうでない場合は FALSE を返します。
#セッション管理クラス

PHP 構成ファイル php.ini を見つけて変更します。以下に、php-fpm サービスを保存して再起動します。

session.save_handler = redis

セッションを管理するクラスを作成します:

<?php 
class SessionManager{

 private $redis;
 private $sessionSavePath;
 private $sessionName;
 private $sessionExpireTime = 60;//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("123456x");//授权
 $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 サーバーから削除します。

セッションの使用

まず、セッションを設定するための set.php ファイルを作成します。

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
$_SESSION[&#39;username&#39;] = &#39;helloweba&#39;;

次に、 を作成します。セッションを取得するための get.php ファイル:

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
echo $_SESSION[&#39;username&#39;];

明らかに、最初にセッション管理クラスを組み込み、インスタンス化した後、通常の PHP セッション関数を使用できます。

テストする場合は、まず set.php にアクセスし、次に get.php にアクセスすると、出力結果は次のようになります:

最後にチェックインします。 redis 結果:

関連学習の推奨事項:

redis ビデオ チュートリアル

以上がRedis を使用してユーザー セッションを保存する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。