设置cookie在wordpress中遇到路径问题

时间:2019-05-01 06:56:16

标签: php wordpress cookies

我试图在我的Wordpress网站上设置cookie。

所以我在header.php上写了以下代码

if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        setcookie('new_my_code', $value, time() + (86400));
    }

但是,问题在于此cookie仅设置了相应的页面,而不是整个域。

例如,如果有人使用 www.mywebsite.com/about/?my-key=123

然后将cookie仅设置在/ about路径上。我想在整个页面或整个域上设置它,我尝试了很多无效的方法

Try 1) header.php

    if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        setcookie('new_my_code', $value, time() + (86400), '/');
    }



Try 2) header.php

    if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        setcookie('new_my_code', $value, time() + (86400), '/', '.mywebsite.com');
    }



Try 3) header.php

    if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        setcookie('new_my_code', $value, time() + (86400), COOKIEPATH, COOKIE_DOMAIN);
    }



Try 4) functions.php

    add_action( 'init', 'setting_my_first_cookie' );

    function setting_my_first_cookie() {
     if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        setcookie('new_my_code', $value, time() + (86400), COOKIEPATH, COOKIE_DOMAIN);
    }
    }




5)

    $rp_path   = isset( $_SERVER['REQUEST_URI'] ) ? current( explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) : '';
    setcookie('new_my_code', $value, time() + (86400),$rp_path, COOKIE_DOMAIN, is_ssl(), true);

我厌倦了网上发现的大多数东西,以使其正常运行。但是,无论我在做什么cookie都只能在同一页面上设置。所以请帮助

有什么解决办法吗?有没有jQuery解决方案?

2 个答案:

答案 0 :(得分:0)

JS对此很有用

document.cookie是您所需要的,但您可以将其包装在函数中并执行

   function setCookie(cname, cvalue, exdays) {
      var d = new Date();
      d.setTime(d.getTime() + (exdays*24*60*60*1000));//set e
      var expires = "expires="+ d.toUTCString();
      document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }

第3周的示例 https://www.w3schools.com/js/js_cookies.asp

然后您必须在事件上运行该功能 // onpageload

document.addEventListener("DOMContentLoaded", function() {
setCookie("cookieName", "value", 10);
});

您还可以尝试通过获取相对固定链接来动态设置Cookie

function get_relative_permalink( $url ) {
    $url = get_permalink();
    return str_replace( home_url(), "", $url );
}


   if($_REQUEST['my-key'] !==""){
        $value=$_REQUEST['my-key'];
        $path = get_relative_permalink();
        setcookie('new_my_code', $value, time() + (86400),$path, '.mywebsite.com');
    }

答案 1 :(得分:-1)

这是WordPress的问题,我想原因是因为当脚本到达set-cookies行时,标题已经发送了!

如果返回true,则可以使用headers_sent()进行检查,以便设置cookie无效。

此行:

setcookie('new_my_code', $value, time() + (86400), '/');

必须为根网站设置cookie

像这样将其放入functions.php中

function setting_my_first_cookie() {
   if($_REQUEST['my-key'] !==""){
      $value=$_REQUEST['my-key'];
      setcookie('new_my_code', $value, time() + (86400), '/');  
   }
}
add_action( 'init', 'setting_my_first_cookie' );

希望获得帮助。