thinkphp6 session_id 生成规则
/**
* session_id设置
* @access public
* @param string $id session_id
* @return void
*/
public function setId($id = null): void
{
$this->id = is_string($id) && strlen($id) === 32 && ctype_alnum($id) ? $id : md5(microtime(true) . session_create_id());
}
自定义setId
Session::setId($session_id);
thinkphp框架会检查 session_id是否字符串,是否长度等于32,是否只包含数字英文.否则随机生成一串md5.
导致自定义的session_id不成功.每次请求都会产生的新的session_id;
解决办法
public function getSessionId($name)
{
$md5Value = md5($name);
$this->session_id_check($md5Value);
return $md5Value;
}
public function session_id_check($id)
{
$res = is_string($id) && strlen($id) === 32 && ctype_alnum($id);
if (!$res) {
throw new \Exception("session_id error", 5001);
}
}
自定义的session_id先进行检查.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构