如何通过ThinkPHP和Session实现追踪特定用户操作并记录详细日志?

2026-05-08 02:430阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1074个文字,预计阅读时间需要5分钟。

如何通过ThinkPHP和Session实现追踪特定用户操作并记录详细日志?

不改动框架日志驱动,直接在写日志前手动注入用户标识最稳妥。ThinkPHP的Log::write()默认不感知Session,需自行获取、拼接。

常见错误是直接在中间件或控制器里调 Log::write('xxx'),结果日志里全是匿名操作,查不到是谁干的。

  • 确保用户已登录且 session('user_id') 可取(推荐用 think\Sessionapp()->session->get('user_id')
  • 不要在日志内容里硬拼字符串,用数组格式传参,避免 SQL 注入式日志污染(比如用户昵称含单引号)
  • 若用 Log::record(),需在记录前调用 Log::setLevel(['info', 'debug']) 并确认日志等级没被过滤

示例:

Log::write([ 'user_id' => session('user_id') ?: 'guest', 'action' => 'edit_profile', 'data' => $inputData, 'ip' => request()->ip() ], 'info');

Session 失效后日志还带 user_id 吗

不会。

阅读全文

本文共计1074个文字,预计阅读时间需要5分钟。

如何通过ThinkPHP和Session实现追踪特定用户操作并记录详细日志?

不改动框架日志驱动,直接在写日志前手动注入用户标识最稳妥。ThinkPHP的Log::write()默认不感知Session,需自行获取、拼接。

常见错误是直接在中间件或控制器里调 Log::write('xxx'),结果日志里全是匿名操作,查不到是谁干的。

  • 确保用户已登录且 session('user_id') 可取(推荐用 think\Sessionapp()->session->get('user_id')
  • 不要在日志内容里硬拼字符串,用数组格式传参,避免 SQL 注入式日志污染(比如用户昵称含单引号)
  • 若用 Log::record(),需在记录前调用 Log::setLevel(['info', 'debug']) 并确认日志等级没被过滤

示例:

Log::write([ 'user_id' => session('user_id') ?: 'guest', 'action' => 'edit_profile', 'data' => $inputData, 'ip' => request()->ip() ], 'info');

Session 失效后日志还带 user_id 吗

不会。

阅读全文