如何获得cookie php / wordpress

时间:2017-12-05 17:22:27

标签: php wordpress cookies setcookie

用户通过推荐链接访问我的网站。

我可以使用以下任一代码段成功设置Cookie: (我知道它是成功的,因为我可以看到我的计算机上保存的cookie文件)

function set_my_cookie() { 
if (empty($_COOKIE['OREF2']))
{
wp_set_auth_cookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200, "/", ".website.com");
}
}
add_action( 'init', 'set_my_cookie');

function set_newuser_cookie() {
    if (!isset($_COOKIE['OREF2'])) {
        setcookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200, "/", ".website.com");
}
}
add_action( 'init', 'set_newuser_cookie');

现在,用户点击了我网站中的其他网页。他们点击一个表单,在他们点击提交时应该传递cookie信息。

我正在使用以下代码段:

function get_my_cookie() { 
//$_COOKIE['OREF2'];
//var_dump($_COOKIE);
echo $_COOKIE['OREF2'];
}
add_shortcode('cookies', 'get_my_cookie');

这第一段代码注释了我试图通过不同方式获取cookie的行。这三种方式都不起作用。然后我继续尝试读取我的cookie是否使用以下代码设置:

function get_my_cookie() { 
if(!isset($_COOKIE['OREF2'])) {
    echo "Cookie named '" . OREF2 . "' is not set!";
} else {
    echo "Cookie '" . OREF2 . "' is set!<br>";
    echo "Value is: " . $_COOKIE['OREF2'];
}}
add_shortcode('cookies', 'get_my_cookie');

使用此代码时,我总是遇到“cookie未设置”即使我可以在计算机上清楚地看到cookie文件。如果未设置cookie,我的短代码不能用于显示任何内容......

我想要的只是一个显示我的cookie的短代码。我究竟做错了什么? 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

如果您使用以下代码:

setcookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200, "/", ".website.com");

这可能无法正确设置Cookie。一个测试是清除cookie并测试:

setcookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200);

这些参数Path和Domain是可选的。如果它们设置不正确,即使是略微设置,您(实际上是浏览器)将无法正确读取Cookie,因为HTTP URL可能无法正确匹配。

正如评论中所建议的那样,您可能需要对此进行更多研究:http://php.net/manual/en/function.setcookie.php

  

我在这里没有弄清楚并且让我困惑一段时间的东西是域名必须包含至少两个点(。),因此'localhost'无效,浏览器将拒绝设置cookie!相反,对于localhost,你应该使用false。

     

要使代码在localhost和适当的域上运行,您可以执行以下操作:

     

<?php

     

$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;

     

setcookie('cookiename', 'data', time()+60*60*24*365, '/', $domain, false);

     

?>

您可能需要考虑使用此代码:

function set_newuser_cookie() {
  if (!isset($_COOKIE['OREF2'])) {
    $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
    setcookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200, "/", $domain);
  }
}

答案 1 :(得分:0)

用户通过推荐来到网站 - 源是从查询字符串创建的。

Prelude Data.Char> mapIO even readLn
75
False

现在,用户点击了网站中的其他网页。他们点击一个表单,当他们点击提交时,它会通过短代码传递cookie信息。

function set_my_cookie() { 
if (empty($_COOKIE['OREF2']))
{
wp_set_auth_cookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200);
}
}
add_action( 'init', 'set_my_cookie');

现在设置cookie,并允许短代码“cookies”随时检索存储的cookie值。

感谢帮助我减少设置的cookie代码并解释域路径。

这适用于localhost没问题!

:)