まえがき
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)
Description | |
---|---|
この関数は、セッションが開かれるときに呼び出されます。 2 つのパラメータを受け取ります。最初のパラメータはセッションを保存するパスで、2 番目のパラメータはセッションの名前です。このコールバック関数は、操作が成功した場合は TRUE を返し、それ以外の場合は FALSE を返します。 | |
この関数は、セッション操作が完了すると呼び出されます。パラメータを受け取りません。このコールバック関数は、操作が成功した場合は TRUE を返し、それ以外の場合は FALSE を返します。 | |
はセッション 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('127.0.0.1', 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 ''; } } 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(); } }
session_set_save_handler
関数を使用してセッション コールバックを設定します。関数を呼び出し、session_start関数を呼び出してセッション関数を開始します。この例の open、close、および gc コールバック関数はあまり役に立たないため、直接 true を返します。
書き込みコールバック関数では、セッション ID をキーとして使用し、セッション データを値として Redis サーバーに保存し、セッションの有効期限を 30 秒に設定します。読み取りコールバック関数では、セッション ID をキーとして使用して、redis サーバーからデータを読み取り、このデータを返します。 destroy コールバック関数では、セッション ID をキーとして使用して、対応するセッション データを Redis サーバーから削除します。
まず、セッションを設定するための set.php ファイルを作成します。
<?php require_once 'SessionManager.php'; new SessionManager(); $_SESSION['username'] = 'helloweba';
<?php require_once 'SessionManager.php'; new SessionManager(); echo $_SESSION['username'];
最後にチェックインします。 redis 結果:
関連学習の推奨事項:
redis ビデオ チュートリアル以上がRedis を使用してユーザー セッションを保存する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。