描述下情况吧,在登录的时候保存 session (图一),有一个 Base 控制器(图二),除了登录的控制器其余的控制器全部 extends Base 。在 Index 的时候 index()方法 session 还是存在的。在 welcome 方法中就没有了。
现在至少有两个项目出现 这种情况了。真是不知道怎么办了 求大佬们解答。求解释!!!

描述下情况吧,在登录的时候保存 session (图一),有一个 Base 控制器(图二),除了登录的控制器其余的控制器全部 extends Base 。在 Index 的时候 index()方法 session 还是存在的。在 welcome 方法中就没有了。
现在至少有两个项目出现 这种情况了。真是不知道怎么办了 求大佬们解答。求解释!!!

1
RickyC Jun 30, 2020
把 welcome() 里面内容清了, 也变成 return $this->fetch() 呢?
|
2
madpecker009 OP @RickyC 沒有用的 还是会循环这个流程
|
3
zarte Jul 1, 2020
看下 index 与 welcome 的 url 是不是同个域
|
4
ben1024 Jul 1, 2020
可以排查下有没有 session_start 的操作
|
5
madpecker009 OP @ben1024 确定是开启的 但是就是这样 我也不知道为啥了
|
6
madpecker009 OP @zarte 是的 但是状态码是 302
维基百科的解释:302 Found,原始描述短语为 Moved Temporarily,是 HTTP 协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的 URI 下[1],故而除非特别指定了缓存头部指示,该状态码不可缓存。 |
7
madpecker009 OP |
8
asLw0P981N0M0TCC Jul 1, 2020
welcome 整个都删了 重新写个 index1 呢
|
9
madpecker009 OP @qwertyzzz 不可以的。。。之前在我本地就有这个 bug 。后来来了新项目 就没管 第二天自己好了。。线上测试环境的却怎么也不好,。。。
http://a2.learnku.top/manager/account/login.html 线上地址 |
10
jfhy0901 Jul 1, 2020
我试了一下, 显示登陆成功,实际上没有保存登陆状态。检查一下 session 是否开启,检查一下是否保存正常等,包括各种日志等信息,细致排查具体原因。实在没办法请换 JWT 。
|
11
madpecker009 OP @jfhy0901 害 session 确定是开启的,在 index 控制器的 index 方法还是能读取出来 session 的。然后再其他的方法里面就读取不到了。就很让人迷惑。实在不行就像你说的 换 jwt 。
|
12
MorningBOBO Jul 1, 2020
额,文件权限上呢
|
13
casper13 Jul 1, 2020
贴一下 account/login 代码和 TP5 的完整配置项
|
14
madpecker009 OP ```
/** * 用户登录 */ public function login(Request $request) { // 用户已经登陆直接跳转到首页 $admin_info = Session::get('admin_info'); if(!empty($admin_info)){ $this->redirect('index/index'); } if($request->isAjax()) { $phone = $request->param('phone','','trim,strip_tags,htmlspecialchars'); $password = $request->param('password','','trim,strip_tags,htmlspecialchars'); $captcha = $request->param('captcha','','trim,strip_tags,htmlspecialchars'); if(!captcha_check($captcha)){ return responseJson('400', '验证码错误'); } $admin_info = \app\manager\model\Admin::alias('a') ->join('role r', 'a.role = r.id') ->where('phone', $phone) ->field('a.*,r.role_name,auth_group') ->find(); if(!$admin_info){ return responseJson('400','账户信息不存在'); } if($admin_info['is_delete'] || $admin_info['is_freeze']){ return responseJson('400','账号异常'); } if(!password_verify($password,$admin_info['password'])){ return responseJson('400','账号密码不匹配'); }else{ $data = [ 'login_ip' => get_real_ip(), 'login_time'=>time() ]; // 更新登录的 ip 地址和登录时间 $res = Db::name('admin')->where('phone',$phone)->data($data)->update(); if(!$res){ return responseJson('500','服务器错误'); } unset($admin_info['password']); $admin_info->auth_rule = \app\manager\model\Admin::getUserAuth($admin_info->auth_group); Session::set('admin_info',$admin_info); return responseJson('200','登陆成功'); } }else{ return $this->fetch(); } } /** * 退出登录 * @param * @return */ public function logout() { Session::delete('admin_info'); return $this->redirect('account/login'); } ``` ``` <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <[email protected]> // +---------------------------------------------------------------------- // +---------------------------------------------------------------------- // | 会话设置 // +---------------------------------------------------------------------- return [ 'id' => '', // SESSION_ID 的提交变量,解决 flash 上传跨域 'var_session_id' => '', // SESSION 前缀 'prefix' => 'think', // 驱动方式 支持 redis memcache memcached 'type' => '', // 是否自动开启 SESSION 'auto_start' => true ]; ``` |
15
hbolive Jul 2, 2020
TP5.1,我用的 session 助手函数,没啥问题,要不试试?
|
16
madpecker009 OP @hbolive 我也试过 就是不行 还有一个模块 代码基本都是 copy 的 一点问题都没有
就是这个 manager 模块出现问题了 |