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) 编辑 收藏 举报