【问题标题】:Set cookie is have an issue with path in wordpress设置 cookie 在 wordpress 中的路径有问题
【发布时间】:2019-09-19 19:20:36
【问题描述】:

我尝试在我的 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 解决方案?

【问题讨论】:

    标签: php wordpress cookies


    【解决方案1】:

    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

    那么你必须在一个事件上运行这个函数 // 页面加载

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

    【讨论】:

      【解决方案2】:

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

      如果返回 true,您可以使用 headers_sent() 进行检查,因此设置 cookie 将不起作用。

      这一行:

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

      必须为根网站设置cookies

      像这样放在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' );
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        相关资源
        最近更新 更多