我为在我的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[]获得的变量一样。
知道我该怎么做吗?
发布于 2014-09-12 00:38:05
在对您的代码进行了一些测试之后,我对它做了一些更改,以便更容易地调试它。
我注意到您写下了"COOKIEPATH,COOKIE_DOMAIN“作为参数,我不知道您是否真的在使用它,但是尝试用"/”和".example.com“替换它们,以便使cookie对整个域可用,或者在必要时进行限制。
这使得它能够在运行PHP5.3.x的服务器上工作。
注意,cookie是在第一次运行页面时创建的,但只有在第二次加载页面时才可用。
当您第一次加载页面时,您应该会看到如下内容:
曲奇被保存
1
01
02
03
曲奇饼干不存在..。现在还没有
第二次应该是:
曲奇被保存
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";
}
?>发布于 2014-09-10 21:11:37
我想您应该使用query_vars[]对象的$wp_query子数组:
global $wp_query;
if (isset($wp_query->query_vars['var1'])) {
// modify the where/join/groupby similar to above examples
}或者简单地使用get_query_var()函数。
https://stackoverflow.com/questions/25775046
复制相似问题