Laravel 5.7 session 问题 : imagepng 后 session 丢失
项目要用到验证码,就找了个第三方的插件接入进来了。经过一番调试,显示是没有问题了,但是始终获取不到session。
经过一点点的测试,发现问题在这里:
//输出
private function outPut() {
header('Content-type:image/png');
imagepng($this->img);//就是这里, 只要把这个注释掉,session就很正常. 不明白生成图片对session有什么影响
imagedestroy($this->img);
}
//对外生成
public function doimg() {
session()->put('code',$this->code);
Session::save();
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
session()->put('code',$this->code);
Session::save();
}
代码及错误的地方如上,求教各位大神如何解决.
关于 LearnKu
imgpng 会直接向浏览器输出数据,会打乱 Laravel 的正常 response 流程,而 session 所依赖的 cookie 正是在这个流程中输出的。
正确的做法是给 imgpng 传第二个参数输出到一个临时文件,然后读取该文件的内容,再通过 Laravel 的方式输出给浏览器。
这个验证码类库 mews/captcha 不存在你说的那个问题