使用GET方法设置SetCookie

时间:2014-09-10 21:02:22

标签: php wordpress cookies

我在我的Wordpress网站中遇到了setcookie()的正确位置,我终于将它放在header.php的第一行。但我需要它来构建cookie,其中的值来自特定页面的url,而不是主页。所以,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[]获得的变量。

我对如何使这项工作有任何想法?

2 个答案:

答案 0 :(得分:2)

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

我注意到你写了“COOKIEPATH,COOKIE_DOMAIN”作为参数,我不知道你是否正在使用它,但尝试用“/”和“.example.com”替换它们以使cookie可供你使用整个领域或必要时限制。
这使它在运行PHP 5.3.x的服务器上运行。

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

首次加载页面时,您会看到类似的内容:

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

第二次应该是这样的:

Cookie已保存
1
01
02
03
01/02/03

希望我能提供帮助。

<?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";
}
?>

答案 1 :(得分:1)

我猜你应该使用$ 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()函数。