Worker 模块登录重定向问题分析
Worker模块登录重定向问题分析和修复方案
问题描述
已登录的用户访问Worker模块页面时,被错误地重定向到登录页。
问题分析
1. 可能的原因
原因1:getUid() 函数缺少错误处理
- 问题:如果Cookie为空或解密失败,
getUid()可能返回0,导致已登录用户被误判为未登录 - 位置:
Banyan/Common/common.php第18-28行 - 修复:添加完整的错误处理,确保在Cookie无效时正确返回0
原因2:登录检查逻辑顺序问题
- 问题:在判断是否为登录页之前就获取了uid,可能导致逻辑混乱
- 位置:
Banyan/Lib/Action/Worker/CommonAction.class.php第9-58行 - 修复:先判断是否为登录页,再获取uid进行登录检查
原因3:Cookie可能无效
- 问题:Cookie可能因为域名、路径、过期等原因无法读取
- 检查:需要确认Cookie设置是否正确
修复方案
修复1:优化 getUid() 函数
文件:Banyan/Common/common.php
修改内容:
- 添加Cookie空值检查
- 添加解密失败检查
- 添加token格式验证
修复2:优化登录检查逻辑
文件:Banyan/Lib/Action/Worker/CommonAction.class.php
修改内容:
- 先判断是否为登录页,如果是则直接返回
- 只在需要检查登录时才获取uid
- 简化判断逻辑
需要上传的文件
- ✅
Banyan/Common/common.php- 修复getUid()函数 - ✅
Banyan/Lib/Action/Worker/CommonAction.class.php- 优化登录检查逻辑
测试步骤
- 清除Cookie测试
- 清除浏览器Cookie
- 访问Worker模块页面
- 应该被重定向到登录页
- 已登录用户测试
- 正常登录系统
- 访问 https://www.baoanfuwu.cn/worker/index/index.html
- 应该能正常显示页面,不被重定向
- 登录页测试
- 访问 https://www.baoanfuwu.cn/worker/passport/login.html
- 应该能正常显示登录页,不会重定向循环
调试方法
如果问题仍然存在,可以添加调试代码:
// 在 CommonAction.class.php 的 _initialize() 方法中添加
error_log("Worker Debug - uid: " . $this->uid . ", cookie exists: " . (isset($_COOKIE['BYCMS_TOKEN']) ? 'yes' : 'no') . ", controller: " . $current_controller . ", action: " . $current_action);
查看服务器错误日志,确认:
- uid的值是否正确
- Cookie是否存在
- 控制器和操作名是否正确
注意事项
- Cookie设置:确保
setUid()函数设置的Cookie域名和路径正确 - 加密密钥:确保
AUTH_KEY配置正确,否则解密会失败 - Cookie过期时间:当前设置为72小时,如果过期会导致需要重新登录
修复日期:2026-01-24
问题状态:已修复
