yii1.1的session丢失问题排查思路对yii2.0大部分适用,核心逻辑一致:检查session id传递是否正常、存储是否成功读写、生命周期是否被意外重置;差异仅在配置位置、组件路径和默认行为细节。

Yii1.1 的 session 丢失问题,排查思路和关键点对 Yii2.0 大部分适用,但具体实现细节、配置位置和组件行为有差异,不能直接套用代码或路径。核心逻辑一致:session ID 传递是否正常、存储是否写入/读取成功、生命周期是否被意外重置或销毁。
Session ID 传不进来?先看 Cookie 和域名设置
- 浏览器开发者工具 → Application → Cookies,确认当前页面域名下是否存在
PHPSESSID(Yii1 默认用这个名),Domain 值是否匹配(比如.example.com才能被www.example.com和api.example.com共享)。 - 检查是否漏掉前导点:
session.cookie_domain = '.example.com'✅,而不是'example.com'❌(后者浏览器拒绝发送)。 - 如果走 HTTPS,确保
session.cookie_secure = 1,否则 HTTP 下设了 Secure 属性的 Cookie 不会被携带。 - Yii1 中可在入口文件
index.php顶部加:ini_set('session.cookie_domain', '.example.com'); ini_set('session.cookie_secure', 1);Yii2 推荐统一在
config/web.php的components['session']中配cookieParams。
Ai Coach Batch Session Summary下载批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
Session 数据没存住?检查存储后端状态
- 默认 File 存储时,确认
session.save_path目录存在、Web 进程(如 www-data)有读写权限,且磁盘未满。 - 用 PHP 命令验证:
var_dump(ini_get('session.save_path')); var_dump(is_writable(ini_get('session.save_path'))); - Yii1 中
CWebUser::login()后调用Yii::app()->session->regenerateID(true)是常见诱因(会丢旧 session 数据),可临时注释该行测试。 - Yii2 中对应逻辑在
yii\web\User::login()内部,但默认不再自动 regenerate,除非显式调用$app->session->regenerateID();若自定义登录逻辑里写了,也要留意。
跨子域或 AJAX 场景下“看着有数据,实际没认证”
- 主站
example.com登录后,子域api.example.com接口返回 401,大概率不是后端鉴权错,而是前端没发 Cookie:- Fetch 请求必须加
credentials: 'include' - Axios 要设
withCredentials: true
- Fetch 请求必须加
- 后端响应头需明确允许来源(不能用
*):header('Access-Control-Allow-Origin: https://example.com'); header('Access-Control-Allow-Credentials: true'); - Yii1 没内置 CORS 支持,需手动加;Yii2 可在
config/web.php的response组件中绑定on beforeSend事件处理。
多机部署下 session 根本不共享?必须换存储方式
- Yii1 和 Yii2 默认都用
FileSession,单机可用,一上负载均衡就失效——用户请求分到不同机器,各自文件互不可见。 - 生产环境必须切 Redis 或数据库:
- Yii1:配置
CRedisCache作 session handler,或改写CApplication::getSession()返回自定义类。 - Yii2:直接配
yii\redis\Session或yii\db\Session,改components['session']['class']即可。
- Yii1:配置
- 共同前提:所有节点连接同一个 Redis 实例(含 db 编号)、或同一数据库表,且
session.save_path(Yii1)或redis配置(Yii2)完全一致。
Yii1.1 和 Yii2.0 的 session 机制底层都基于 PHP 原生 session,所以绝大多数丢失原因(Cookie 设置、存储权限、跨域策略、多机同步)是共通的。差异只在配置写法、组件路径和默认行为细节上。定位问题时,优先按“ID 是否到达服务端 → 是否成功关联已有数据 → 数据是否写入持久化介质”三层去验证,比盲目改框架代码更高效。










