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