PHP は Redis ストレージ セッションを実装します
一、首先实现SessionHandlerInterface(此接口PHP>5.4.0),如下
<pre font-size:9.0pt><span><?php </span><span><em>/** </em></span><span><em> * 以db的方式存储<strong>Session</strong> </em></span><span><em> */ </em></span><span>namespace </span><span>OC\<strong>Session</strong></span><span>; </span><span></span><span>class </span><span>redis<strong>Session</strong> </span><span>implements </span><span>\<strong>Session</strong>HandlerInterface{ </span><span></span><span><em>/** </em></span><span><em> * 保存<strong>Session</strong>的数据库表的信息 </em></span><span><em> */ </em></span><span><em></em></span><span>private </span><span>$_options </span><span>= </span><span>array</span><span>( </span><span></span><span>'handler' </span><span>=> </span><span>null</span><span>, </span><span>//数据库连接句柄 </span><span></span><span>'host' </span><span>=> </span><span>null</span><span>, </span><span></span><span>'port' </span><span>=> </span><span>null</span><span>, </span><span></span><span>'lifeTime' </span><span>=> </span><span>null</span><span>, </span><span></span><span>)</span><span>; </span><span></span><span><em>/** </em></span><span><em> * 构造函数 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$options 设置信息数组 </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>__construct</span><span>(</span><span>$options</span><span>=</span><span>array</span><span>()){ </span><span></span><span>if</span><span>(!class_exists(</span><span>"redis"</span><span>, </span><span>false</span><span>)){ </span><span></span><span>die</span><span>(</span><span>"必须安装redis扩展"</span><span>)</span><span>; </span><span></span><span>} </span><span></span><span>if</span><span>(!</span><span>isset</span><span>(</span><span>$options</span><span>[</span><span>'lifeTime'</span><span>]) || </span><span>$options</span><span>[</span><span>'lifeTime'</span><span>] <= </span><span>0</span><span>){ </span><span></span><span>$options</span><span>[</span><span>'lifeTime'</span><span>] = ini_get(</span><span>'<strong>Session</strong>.gc_maxlifetime'</span><span>)</span><span>; </span><span></span><span>} </span><span></span><span>$this</span><span>-></span><span>_options </span><span>= array_merge(</span><span>$this</span><span>-></span><span>_options</span><span>, </span><span>$options</span><span>)</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 开始使用该驱动的<strong>Session</strong> </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>begin</span><span>(){ </span><span></span><span>if</span><span>(</span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'host'</span><span>] === </span><span>null </span><span>|| </span><span></span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'port'</span><span>] === </span><span>null </span><span>|| </span><span></span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'lifeTime'</span><span>] === </span><span>null </span><span></span><span>){ </span><span></span><span>return false</span><span>; </span><span></span><span>} </span><span></span><span>//设置<strong>Session</strong>处理函数 </span><span></span><span><strong>Session</strong>_set_save_handler( </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'open'</span><span>)</span><span>, </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'close'</span><span>)</span><span>, </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'read'</span><span>)</span><span>, </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'write'</span><span>)</span><span>, </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'destory'</span><span>)</span><span>, </span><span></span><span>array</span><span>(</span><span>$this</span><span>, </span><span>'gc'</span><span>) </span><span> )</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 自动开始回话或者<strong>Session</strong>_start()开始回话后第一个调用的函数 </em></span><span><em> * 类似于构造函数的作用 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$savePath 默认的保存路径 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$<strong>Session</strong>Name 默认的参数名,PHPSESSID </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>open</span><span>(</span><span>$savePath</span><span>, </span><span>$<strong>Session</strong>Name</span><span>){ </span><span></span><span>if</span><span>(is_resource(</span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>])) </span><span>return true</span><span>; </span><span></span><span>//连接redis </span><span></span><span>$redisHandle </span><span>= </span><span>new </span><span>\Redis()</span><span>; </span><span></span><span>$redisHandle</span><span>-></span><span>connect</span><span>(</span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'host'</span><span>]</span><span>, </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'port'</span><span>])</span><span>; </span><span></span><span>if</span><span>(!</span><span>$redisHandle</span><span>){ </span><span></span><span>return false</span><span>; </span><span></span><span>} </span><span></span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>] = </span><span>$redisHandle</span><span>; </span><span></span><span>$this</span><span>-></span><span>gc</span><span>(</span><span>null</span><span>)</span><span>; </span><span></span><span>return true</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 类似于析构函数,在write之后调用或者<strong>Session</strong>_write_close()函数之后调用 </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>close</span><span>(){ </span><span></span><span>return </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>]-></span><span>close</span><span>()</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 读取<strong>Session</strong>信息 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$<strong>Session</strong>Id 通过该Id唯一确定对应的<strong>Session</strong>数据 </em></span><span><em> * </em></span><span><em>@return </em></span><span><em><strong>Session</strong>信息/空串 </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>read</span><span>(</span><span>$<strong>Session</strong>Id</span><span>){ </span><span></span><span>return </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>]-></span><span>get</span><span>(</span><span>$<strong>Session</strong>Id</span><span>)</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 写入或者修改<strong>Session</strong>数据 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$<strong>Session</strong>Id 要写入数据的<strong>Session</strong>对应的id </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$<strong>Session</strong>Data 要写入的数据,已经序列化过了 </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>write</span><span>(</span><span>$<strong>Session</strong>Id</span><span>, </span><span>$<strong>Session</strong>Data</span><span>){ </span><span></span><span>return </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>]-></span><span>setex</span><span>(</span><span>$<strong>Session</strong>Id</span><span>, </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'lifeTime'</span><span>]</span><span>, </span><span>$<strong>Session</strong>Data</span><span>)</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 主动销毁<strong>Session</strong>会话 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>$<strong>Session</strong>Id 要销毁的会话的唯一id </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>destroy</span><span>(</span><span>$<strong>Session</strong>Id</span><span>){ </span><span></span><span>return </span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>]-></span><span>delete</span><span>(</span><span>$<strong>Session</strong>Id</span><span>) >= </span><span>1 </span><span>? </span><span>true </span><span>: </span><span>false</span><span>; </span><span></span><span>} </span><span></span><span><em>/** </em></span><span><em> * 清理绘画中的过期数据 </em></span><span><em> * </em></span><span><em>@param </em></span><span><em>有效期 </em></span><span><em> */ </em></span><span><em></em></span><span>public function </span><span>gc</span><span>(</span><span>$lifeTime</span><span>){ </span><span></span><span>//获取所有<strong>Session</strong>id,让过期的释放掉 </span><span></span><span>$this</span><span>-></span><span>_options</span><span>[</span><span>'handler'</span><span>]-></span><span>keys</span><span>(</span><span>"*"</span><span>)</span><span>; </span><span></span><span>return true</span><span>; </span><span></span><span>} </span><span>}</span>
<span>二、调用时使用方法:</span>
<pre font-size:9.0pt><span><strong>Session</strong>_set_save_handler(\OC::</span><span><em>$server</em></span><span>-></span><span>getRedis<strong>Session</strong></span><span>()</span><span>,</span><span>true</span><span>)</span><span>; </span><span>register_shutdown_function(</span><span>'<strong>Session</strong>_write_close'</span><span>)</span><span>;</span><span></span><span><strong>Session</strong>_start()</span><span>;</span>
<span>三、解释:</span>
<span>\OC::</span><span><em>$server</em></span><span>-></span><span>getRedis<strong>Session</strong></span><span>()</span>
以上的调用对象的方法时使用了pimple容器存储对象并调用的方式。具体如下使用:
<span>namespace </span><span>OC</span><span>;</span>
<span>class </span><span>Server </span><span>extends </span><span>SimpleContainer </span><span>implements </span><span>IServerContainer {</span>
在此server类中注册加入对象,
<span>$this</span><span>-></span><span>registerService</span><span>(</span><span>'Redis<strong>Session</strong>'</span><span>,</span><span>function </span><span>(Server </span><span>$c</span><span>) { </span><span></span><span>return new </span><span>\OC\<strong>Session</strong>\redis<strong>Session</strong>( </span><span></span><span>$c</span><span>-></span><span>getSystemConfig</span><span>()-></span><span>getValue</span><span>(</span><span>'redis'</span><span>) </span><span> )</span><span>; </span><span>})</span><span>;</span>
<span><em>/** </em></span><span><em> * 新增的获取用户redis<strong>Session</strong>的方法 </em></span><span><em> */ </em></span><span>public function </span><span>getRedis<strong>Session</strong></span><span>() { </span><span></span><span>return </span><span>$this</span><span>-></span><span>query</span><span>(</span><span>'Redis<strong>Session</strong>'</span><span>)</span><span>; </span><span>}</span>
<span><strong>Session</strong>_set_save_handler(\OC::</span><span><em>$server</em></span><span>-></span><span>getRedis<strong>Session</strong></span><span>()</span><span>,</span><span>true</span><span>)</span><span>;中的</span>
<span>\OC::</span><span><em>$server</em></span><span>-></span><span>getRedis<strong>Session</strong></span><span>()</span>ログイン後にコピー
就是上面一、中的类的对象
参考:http://www.tuicool.com/articles/yeeyume
以上就介绍了PHP实现redis存储session,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Watch4proとgtはそれぞれ特徴や適用シーンが異なりますが、総合的な機能、高性能、スタイリッシュな外観を重視し、価格は高くてもいいという方にはWatch 4 Proの方が適しているかもしれません。高度な機能要件はなく、バッテリー寿命と手頃な価格を重視する場合は、GT シリーズの方が適しているかもしれません。最終的な選択は、個人のニーズ、予算、好みに基づいて決定する必要がありますが、購入する前に自分のニーズを慎重に検討し、さまざまな製品のレビューや比較を参照して、より情報に基づいた選択を行うことをお勧めします。

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 バッテリー寿命の延長はモバイル デバイス エクスペリエンスの鍵であり、iPad がその良い例です。 iPad のバッテリーの消耗が早すぎると感じても、心配しないでください。iPadOS 17.4 には、デバイスの実行時間を大幅に延長できるトリックや微調整が多数あります。この詳細なガイドの目的は、情報を提供するだけではなく、iPad の使用方法を変え、全体的なバッテリー管理を強化し、充電せずにデバイスをより長く使用できるようにすることです。ここで概説したプラクティスを採用することで、個人のニーズや使用パターンに合わせてテクノロジーをより効率的かつ意識的に使用するための一歩を踏み出すことができます。主要なエネルギー消費者を特定する

请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?那么请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?http://127.0.0.1/myo/newuser.php?mod=search&type=fastone比如现在我要修改mod=new要怎么做呢?------解决方案--------------------发送了请求

8月8日、Huawei端末はHuawei MateBook GT14「Super Starlight Show」を正式に発売しました。有名な俳優の江淑英とリーグ・オブ・レジェンドプロフェッショナルリーグの公式解説者グアン・ゼユアンがライブブロードキャストルームのゲストとして登場し、ファーウェイの最新ノートブックであるHuawei MateBook GT14を個人的に体験しました。生放送中、Jiang ShuyingとGuan ZeyuanはHuawei MateBook GT14を大いに賞賛しました。 CNMOは、生放送中に江秀英氏、関澤源氏、ファーウェイのPC製品ライン社長がファーウェイMateBook GT14の分解を目撃したことに気づいた。 Huawei MateBook GT14の内部設計は非常に整っていて、高密度マザーボード設計を採用していることがわかります。マザーボードもキーボードから遠ざけるために部分的に沈んでいます。これです
