[已解决]关于webman-admin的session无法读取到缓存问题

楚羽幽

bug描述

在AccountController这个控制器里面的代码,session这个函数读取session里面的缓存验证码时,无法读取
runtime和vendor目录已经给了写入权限了,并且runtime目录的session确实是已经生成了session的缓存
我这边打印看了一下,session这个函数里面没有captcha-login这个参数

看了一下session工具的运行原理是从请求头里面的cookie里面拿到PHPSID来进行获取缓存数据然后进行比对,但我的浏览器却是每一次请求都是一个全新的PHPSID

该问题在群友的帮助下已解决!!!!

主要问题是nginx的proxy_cookie_path / "/; HttpOnly; SameSite=strict";配置不能有secure参数,这个参数只有https协议才能传递cookie

程序代码或配置

代码文件:plugin/admin/app/controller/common/AccountController.php

public function login(Request $request){
$captcha = $request->post('captcha');
print_r(session());
if (strtolower($captcha) !== session('captcha-login')) {
return $this->json(1, '验证码错误');
}
$request->session()->forget('captcha-login');
$username = $request->post('username', '');
$password = $request->post('password', '');
if (!$username) {
return $this->json(1, '用户名不能为空');
}
$this->checkLoginLimit($username);
$admin = Admin::where('username', $username)->first();
if (!$admin || !Util::passwordVerify($password, $admin->password)) {
return $this->json(1, '账户不存在或密码错误');
}
$this->removeLoginLimit($username);
$admin = $admin->toArray();
$session = $request->session();
unset($admin['password']);
$admin['roles'] = $admin['roles'] ? explode(',', $admin['roles']) : [];
$session->set('admin', $admin);
return $this->json(0, '登录成功', [
'nickname' => $admin['nickname'],
'token' => $request->sessionId(),
]);
}
767 0 1
0个回答

年代过于久远,无法发表回答
🔝