如何获取 cookie php/wordpress

how to get cookie php/wordpress

用户通过推荐来到我的网站 link。

我可以使用以下任一代码片段成功设置 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。 3 种方法中的 None 有效。然后我继续尝试读取我的 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 is NOT set" 即使我可以清楚地看到我计算机上的 cookie 文件。如果未设置 cookie,我的短代码将无法用于显示任何内容...

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

如果您使用以下代码:

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

这可能无法正确设置 cookie。一项测试是清除 cookie 并使用 :

进行测试
setcookie('OREF2', $_SERVER['QUERY_STRING'], time()+5200);

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

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

Something that wasn't made clear to me here and totally confused me for a while was that domain names must contain at least two dots (.), hence 'localhost' is invalid and the browser will refuse to set the cookie! instead for localhost you should use false.

To make your code work on both localhost and a proper domain, you can do this:

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

用户通过引荐来源访问网站-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 信息。

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

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

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

这在本地主机上没问题!

:)