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

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

|
RickyCJun 30, 2020
1
把 welcome() 里面内容清了, 也变成 return $this->fetch() 呢?
|
|
2
@RickyC 沒有用的 还是会循环这个流程
|
|
zarteJul 1, 2020
3
看下 index 与 welcome 的 url 是不是同个域
|
|
ben1024Jul 1, 2020
4
可以排查下有没有 session_start 的操作
|
|
5
@ben1024 确定是开启的 但是就是这样 我也不知道为啥了
|
|
6
@zarte 是的 但是状态码是 302
维基百科的解释:302 Found,原始描述短语为 Moved Temporarily,是 HTTP 协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的 URI 下[1],故而除非特别指定了缓存头部指示,该状态码不可缓存。 |
|
7
|
|
asLw0P981N0M0TCCJul 1, 2020
8
welcome 整个都删了 重新写个 index1 呢
|
|
9
@qwertyzzz 不可以的。。。之前在我本地就有这个 bug 。后来来了新项目 就没管 第二天自己好了。。线上测试环境的却怎么也不好,。。。
http://a2.learnku.top/manager/account/login.html 线上地址 |
|
jfhy0901Jul 1, 2020
10
我试了一下, 显示登陆成功,实际上没有保存登陆状态。检查一下 session 是否开启,检查一下是否保存正常等,包括各种日志等信息,细致排查具体原因。实在没办法请换 JWT 。
|
|
11
@jfhy0901 害 session 确定是开启的,在 index 控制器的 index 方法还是能读取出来 session 的。然后再其他的方法里面就读取不到了。就很让人迷惑。实在不行就像你说的 换 jwt 。
|
|
MorningBOBOJul 1, 2020
12
额,文件权限上呢
|
|
casper13Jul 1, 2020
13
贴一下 account/login 代码和 TP5 的完整配置项
|
|
14
```
/** * 用户登录 */ 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 ]; ``` |
|
hboliveJul 2, 2020
15
TP5.1,我用的 session 助手函数,没啥问题,要不试试?
|
|
16
@hbolive 我也试过 就是不行 还有一个模块 代码基本都是 copy 的 一点问题都没有
就是这个 manager 模块出现问题了 |