現在の位置: ホーム> 最新記事一覧> session_start()を組み合わせるとき、sessionhandler :: create_sid関数を使用して排他的なセッションIDをカスタマイズする方法は?

session_start()を組み合わせるとき、sessionhandler :: create_sid関数を使用して排他的なセッションIDをカスタマイズする方法は?

M66 2025-06-21

3。実装手順の例

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// カスタマイズSessionHandler</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">CustomSessionHandler</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">SessionHandler</span></span><span>
{
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">create_sid</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
    {
        </span><span><span class="hljs-comment">// ここ16バイトランダム文字列 + 現在のタイムスタンプはセッションを構成しますID,ユニークで予測不可能であることが保証されています</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>)) . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
    }
}

</span><span><span class="hljs-comment">// 实例化カスタマイズ的プロセッサ</span></span><span>
</span><span><span class="hljs-variable">$handler</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">CustomSessionHandler</span></span><span>();

</span><span><span class="hljs-comment">// 设置カスタマイズ的Sessionプロセッサ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// 起動するSession,使用カスタマイズ会话IDルールを生成します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在Session ID:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">session_id</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4。指示と予防策

  • session_set_save_handler()の2番目のパラメーターはtrueに設定されています。つまり、phpはcopen()read ()write ()、 destroy()gc() 、および登録プロセッサによって実装されたその他のメソッドを自動的に呼び出します。セッションハンドラーを継承した後、デフォルトの動作はすべての書き換えなく保持されます。

  • create_sid()は、セッションIDの生成のみを担当し、セッションデータのストレージロジックは含まれません。

  • 生成されたIDは、セッションIDの競合を回避するのに十分なランダムで一意である必要があります。

  • セッションIDをカスタマイズした後、古いセッションID形式は互換性がない場合があり、オンラインで注意する必要があります。