【问题标题】:SetCookie with GET method使用 GET 方法的 SetCookie
【发布时间】:2014-09-12 08:45:17
【问题描述】:

我在我的 Wordpress 站点中为 setcookie() 的正确位置而苦苦挣扎,最终我将它放在我的 header.php 的第一行使其工作。但我需要它来使用从特定页面的 url 获取的值构建 cookie,这不是主页。所以,我header.php 的第一行是:

<?php setcookie( 'mycookie', $_GET["var1"]."/".$_GET["var2"]."/".$_GET["var3"], strtotime( '+5 years' ), COOKIEPATH, COOKIE_DOMAIN, false, false);?>

我期待当我转到http://www.example.com/?var1=01&var2=02&var3=03 时,cookie 的值将设置为“01/02/03”,但它只接收与任何其他页面中相同的值,“//”,例如它没有看到$_GET[] 得到的变量。

有什么想法可以让我完成这项工作吗?

【问题讨论】:

    标签: php wordpress cookies


    【解决方案1】:

    在对您的代码进行一些测试后,我对其进行了一些更改,以便更轻松地调试它。

    我注意到您写下了“COOKIEPATH,COOKIE_DOMAIN”作为参数,我不知道您是否按字面意思使用它,但尝试用“/”和“.example.com”替换它们以使 cookie 可供您使用整个域或根据需要进行限制。
    这使它可以在我运行 PHP 5.3.x 的服务器上运行。

    请注意,cookie 是在页面第一次运行时创建的,但仅在页面第二次加载时才可用。

    第一次加载页面时,您应该会看到如下内容:

    Cookie 已保存
    1
    01
    02
    03
    Cookie mycookie 尚不存在...

    第二次应该是这样的:

    Cookie 已保存
    1
    01
    02
    03
    2003 年 1 月 2 日

    希望我能帮上忙。

    <?php
    $cookieName = "mycookie";
    $cookieIsSaved = setcookie( $cookieName,
            $_GET["var1"]."/".$_GET["var2"]."/".$_GET["var3"],
            strtotime( "+5 years" ),
            "/",
            ".example.com",
            false,
            false);
    
    if ($cookieIsSaved) {
      echo "Cookie was Saved<br/>";
    }
    else
    {
      echo "Cookie was not Saved<br/>";
    }
    
    echo $cookieIsSaved."<br/>";
    echo($_GET["var1"]."<br/>");
    echo($_GET["var2"]."<br/>");
    echo($_GET["var3"]."<br/>");
    
    if (isset($_COOKIE[$cookieName])) {
      print_r($_COOKIE[$cookieName])."<br/>";
    }
    else
    {
      echo "Cookie $cookieName does not exist... yet";
    }
    ?>
    

    【讨论】:

    • 这非常有帮助,感谢您的教导。我和许多其他新手都非常感谢它!
    【解决方案2】:

    我猜你应该使用 $wp_query 对象的 query_vars[] 子数组:

    global $wp_query;
    if (isset($wp_query->query_vars['var1'])) {
        // modify the where/join/groupby similar to above examples
    }
    

    或者只是 get_query_var() 函数。

    【讨论】:

    • 非常感谢,ywarnier,但它也不起作用。当我在 setcookie 之后发送一个 `echo($_GET["var1"]) 时,我看到了正确的值,所以它存在但没有进入 setcookie。我从 echo(get_query_var('var1')) 中什么也没得到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2018-10-16
    • 2011-02-14
    • 2021-03-19
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多