<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
session_set_save_handler()的第二个参数设为true,意味着PHP会自动调用注册的处理器实现的open(), close(), read(), write(), destroy(), gc()等方法。继承SessionHandler后,默认行为保留,无需全部重写。
create_sid()仅负责生成会话ID,不涉及会话数据的存储逻辑。
生成的ID应足够随机且唯一,避免会话ID冲突。
自定义会话ID后,旧会话ID格式可能不兼容,需谨慎上线。
相关标签:
SessionHandler