You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress设置referrer Cookie报未定义数组键错误及修复写法咨询

问题根因

你遇到的Undefined array key "referrer"警告是PHP版本升级导致的:PHP 8.0+将访问未定义数组键的错误级别从Notice调整为Warning,原代码未判断$_GET中是否存在referrer键就直接取值,当URL不带referrer查询参数时就会触发该警告。低版本PHP下该问题不会抛出显性警告,因此代码之前可以无报错运行。

自写修复方案的有效性

你在外层包裹isset($_GET['referrer'])判断的思路完全正确,已经可以解决当前的警告问题,但代码还有几处可优化的点,避免后续出现其他问题:

  • 内层条件重复判断$_GET['referrer'],属于冗余逻辑
  • 未校验Session启动状态,WordPress默认不会主动开启原生Session,直接读写$_SESSION可能触发其他PHP警告
  • 未对前端传入的referrer参数做安全过滤,直接将用户可控内容存入Session和Cookie存在XSS注入风险
最终优化代码
add_action('init', 'set_cookie_based_on_url_parameter_referrer');
function set_cookie_based_on_url_parameter_referrer()
{
    // 未启动Session时先初始化
    if (session_status() === PHP_SESSION_NONE) {
        session_start();
    }
    // 合并判断:Session无referrer记录、GET参数中存在非空referrer
    if (!isset($_SESSION['referrer']) && isset($_GET['referrer']) && !empty($_GET['referrer'])) {
        // 用WordPress内置安全函数过滤传入参数
        $referrer_val = sanitize_text_field($_GET['referrer']);
        $cookie_expire = time() + 60 * 60 * 24 * 30;
        $_SESSION['referrer'] = $referrer_val;
        setcookie('referrer', $referrer_val, $cookie_expire, '/', '.' . $_SERVER['HTTP_HOST']);
    }
}

注意:该代码挂载在WordPress的init钩子执行是正确选择,此时页面还未输出任何内容,不会触发setcookie导致的"headers already sent"报错。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:24:19