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

WordPress中PHP检查URL与Cookie后异常跳转问题排查

解决WordPress代码片段中Cookie验证失效的问题

问题根源分析

你的代码出现"无论Cookie是否设置都跳转"的问题,核心原因有两个:

  1. Cookie判断逻辑错误:内层条件同时要求thename Cookie存在,且_r_ck Cookie值为thevalue。如果thename未设置,哪怕_r_ck符合要求,也会触发跳转;另外直接读取$_COOKIE["_r_ck"]未做存在性检查,若该Cookie不存在会直接导致条件不成立。
  2. 端口号使用全角字符:$_SERVER["SERVER_PORT"] != "۸۰"中的"۸۰"是全角数字,而服务器返回的端口号是半角"80",会导致URL拼接逻辑异常,可能影响后续的URL匹配(根据你描述的跳转情况,应该已进入URL匹配的外层判断,但该问题仍需修正)。

修正后的代码

function get_current_url()
{
    $pageURL = 'http';
    if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    }
    $pageURL .= "://";
    // 修正为半角数字80
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }

    return $pageURL;
}

$url = get_current_url();
$no_c_redirect = 'https://example.com/content/file.html';

if (strpos($url, '/secured-registration/') !== false) {
    // 仅验证_r_ck Cookie存在且值正确(若需同时验证thename,添加isset($_COOKIE["thename"]) && 即可)
    if (isset($_COOKIE["_r_ck"]) && $_COOKIE["_r_ck"] === "thevalue") {
        // Cookie符合要求时的逻辑(留空或添加业务代码)
    } else {
        header('Location: '.$no_c_redirect);
        // 跳转后必须终止脚本,避免后续代码运行
        exit;
    }
}

额外优化建议

  • 跳转后加exit;:使用header('Location: ...')后必须终止脚本执行,防止后续代码运行引发意外问题。
  • 用WordPress内置函数:可以用home_url(add_query_arg(array(), $wp->request))替代自定义的get_current_url,减少自定义代码的潜在问题。
  • 确认Cookie参数:检查前端设置的Cookie名称、值是否与代码一致,同时确认Cookie的域名、路径作用域是否覆盖当前页面,避免Cookie无法被读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39