Discuz后台设置指定 IP 允许访问把管理员给禁了怎么办
原理:在 Discuz! X3.5 中,后台设置「指定 IP 允许访问」的功能是通过 common_setting 表来存储配置的。
具体来说:
[*] 设置路径:后台 → 全局 → 安全验证 → IP 访问限制
[*] 当你启用了“仅允许以下 IP 访问站点”并填写了 IP 列表后,Discuz 会将这些 IP 保存在数据库的 common_setting 表中,字段名为 setting,对应的 skey(键名)为 accesslist。
解决方法
如果你把自己 IP 错误地排除在外,导致无法登录后台,可以通过以下方式恢复:
方法一:直接清空 IP 限制(推荐)
[*] 登录你的数据库(如 phpMyAdmin、MySQL 命令行等)。
[*] 找到 Discuz 的数据库,执行以下 SQL 语句:
DELETE FROM `common_setting` WHERE `skey` = 'accesslist';
或者,也可以更新为空值(保留记录但清空内容):
UPDATE `common_setting` SET `svalue` = '' WHERE`skey` = 'accesslist';
注意:svalue 字段存储的是序列化后的字符串(通常是 PHP 序列化格式),如果只是想临时关闭限制,也可以直接删除该行或设为空。
[*] 清除缓存(可选):
[*] 删除 data/cache/ 目录下的 cache_setting.php 文件;
[*] 或者访问 你的网站/tools/updatecache.php(需开启开发者工具或手动创建)。
方法二:通过 config.inc.php 临时绕过(高级)
Discuz 的 IP 限制是在程序运行时读取 common_setting 缓存的。如果你无法访问后台也无法操作数据库,可以尝试临时修改源码跳过验证(不推荐长期使用):
在 source/class/discuz/discuzapplication.php 中找到类似如下代码段(X3.5 大概在 initmisc() 或 init_setting() 部分):
if($_G['setting']['accesslist'] && !in_array($_G['clientip'], $_G['setting']['accesslist'])) {
exit('Access denied.');
}
你可以临时注释掉这段代码,恢复访问后再通过后台或数据库修复设置。
补充说明
[*] common_setting 表结构简要:
[*] skey:配置项名称(如 accesslist)
[*] svalue:配置值(PHP 序列化格式,例如 a:2:{i:0;s:9:"192.168.1.1";i:1;s:9:"10.0.0.1";})
[*] 如果你不确定自己的 IP 是否被正确包含,建议先通过其他设备或网络确认当前公网 IP。
来源:千问
页:
[1]