Laravel 5.4.36 session 发现

由于Laravel session机制完全脱离了PHP自带的session机制  因此对于php.ini 配置session对Laravel  是不会产生影响

代码路径:   vendor/laravel/framework/src/Illuminate/Session/Store.php

验证猜测  魔术方法   __construct

   

    /**
     * Create a new session instance.
     *
     * @param  string $name
     * @param  \SessionHandlerInterface $handler
     * @param  string|null $id
     * @return void
     */
    public function __construct($name, SessionHandlerInterface $handler, $id = null)
    {
        $this->setId($id);
        $this->name = $name;
        $this->handler = $handler;
    }

关于其中的ID  就是我们说的sessionID  

查看 setId()

    /**
     * Set the session ID.
     *
     * @param  string  $id
     * @return void
     */
    public function setId($id)
    {
        $this->id = $this->isValidId($id) ? $id : $this->generateSessionId();
    }

如果id 为空 调用  generateSessionId() 

    /**
     * Get a new, random session ID.
     *
     * @return string
     */
    protected function generateSessionId()
    {
        return Str::random(40);
    }

方法  Str::random(40)   文件 :vendor/laravel/framework/src/Illuminate/Support/Str.php

    /**
     * Generate a more truly "random" alpha-numeric string.
     *
     * @param  int  $length
     * @return string
     */
    public static function random($length = 16)
    {
        $string = '';

        while (($len = strlen($string)) < $length) {
            $size = $length - $len;

            $bytes = random_bytes($size);

            $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
        }

        return $string;
    }

可见 sessionID 使用的是本地的ID生成40位长度的字符串  

 

如果有兴趣的同学 可以验证 在控制器方法中 使用原生的session方法  查看返回http头中的信息

 

posted on 2018-02-10 00:08  Sunlight1992  阅读(190)  评论(0编辑  收藏  举报

导航