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先进行检查.

posted @ 2022-07-01 11:11  冯元春  阅读(737)  评论(0)    收藏  举报