注销成功监听扩展
通过 Filter_Plugin_Logout_Succeed 接口,可以在 Z-BlogPHP 的 Logout() 执行完毕后做收尾处理,适合注销审计、清理用户临时数据等场景。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Logout_Succeed | 无 | Logout 成功的接口 |
完整案例
下例在注销后记录审计日志,并清理插件为该用户准备的临时目录:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Logout_Succeed', 'demoAPP_Logout_Succeed');
}
function demoAPP_Logout_Succeed()
{
global $zbp;
// 记录注销日志
$log = date('Y-m-d H:i:s') . ' ' . $zbp->user->Name . ' logout, ip=' . GetGuestIP() . PHP_EOL;
file_put_contents($zbp->usersdir . 'plugin/demoAPP/logout.log', $log, FILE_APPEND | LOCK_EX);
// 清理该用户的临时文件
$tmp = $zbp->usersdir . 'plugin/demoAPP/tmp/' . $zbp->user->ID . '/';
if (is_dir($tmp)) {
foreach ((array) glob($tmp . '*') as $f) {
@unlink($f);
}
}
}注意事项
- 触发位置在
zb_system/function/c_system_event.php的Logout()内,位于用户名、Token、密码、addinfo 等登录 Cookie 全部清除之后; - 接口没有参数;此时
$zbp->user对象仍可读取,便于日志记录; - Z-BlogPHP 的 API 登出流程(
zb_system/api/member.php)同样触发本接口; - cmd.php 的
act=logout请求会先经CheckIsRefererValid()校验来源再执行注销; - 适合做注销审计与清理,不适合输出页面内容。