Set Cookie在WordPress中的路径有问题



我尝试在我的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仅在路径上设置为/围绕路径。我想将其设置在整个页面或整个域中,我尝试了很多事情

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解决方案吗?

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=/";
    }

W3的示例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');
    }

这是WordPress的问题,我猜是因为当您的脚本到达set-cookies line时已经发送标题!

您可以使用headers_sent((进行检查,如果返回true,则设置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' );

希望这个帮助。

最新更新