固定链接结构中的更改导致Java脚本Cookie无法正常工作

时间:2014-10-28 作者:Sandesh Yadav

我的网站需要一种机制,当用户第一次访问网站时,会将其发送到协议页面。一旦他接受协议,它就会保存在cookie. 之后他可以直接浏览任何页面。

我正在使用javascript 对于cookie,只要permalink设置为default 一个(http://mydomain.com/?p=123).

只要我换了permalinkpostname (http://mydomain.com/sample-post/) 它开始出现问题。

(htaccess文件中的更改是按照wordpress的建议进行的)

问题是:即使用户单击协议按钮,也会一次又一次地重定向到协议页面。

以下是代码。

在里面header.php

        setCookie("requested_url", document.URL, 4);
        var agreement = getCookie("agreement");

        if(agreement == "yes"){
            var requested_url = getCookie("requested_url");
        }

        else{
            window.location.assign("http://mydomain.com/?page_id=22");
        }
在标题中。php,它检查名为agreement的cookie是否设置为yes。如果是,则不执行任何操作。如果未设置为“是”,则重定向到协议页(/?page\\u id=22)。协议(cookie)在此页面中设置。

在里面page_id=22(page-22.php)

       <script type = "text/javascript">

            function yesbutton()
                {
                    setCookie("agreement", "yes", 5);
                    window.location.assign(getCookie("requested_url"));
                }

                </script>

        <div class="agreementButton">
            <input type = "button" onclick = "yesbutton()" value = "Accept">
        </div>
在翻遍代码后,我发现header.php 未正确访问协议的值。

第22页。phpsetCookie("agreement", "yes", 5); 工作正常。我可以在这里发出警报并获取其值(是)。

但当我在header.php 它会提醒空白区域。在标题中。php此代码返回一个空白弹出窗口。

        var agreement = getCookie("agreement");
        alert(agreement);
这显然意味着将cookie(协议)设置为yes 在里面page-22.php 未在中访问header.php 正确地但我不知道为什么会这样。奇怪的是当永久链接default 一、一切正常。一旦permalink设置为postname, cookie(协议)在中变为空白header.php.

更新:两个标头中都存在setCookie和getCookie函数。php和第22页。php。

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

        function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(\';\');
            for(var i=0; i<ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0)==\' \') c = c.substring(1);
                if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
            }
            return "";
        }
这两个函数在两个页面中都运行良好。

问题是:

      setCookie("agreement", "yes", 5); 

    that is done in page-22.php sets cookie correctly.
但当在标头中访问相同的cookie时。php与

       var agreement = getCookie("agreement");

       the value of agreement is blank.

       alert(agreement) returns blank space.
欢迎提供任何线索/提示。

1 个回复
最合适的回答,由SO网友:Otto 整理而成

来自评论:

没有足够的信息来回答您的问题。所有代码都是javascript,而不是PHP。此外,javascript中没有名为“setCookie”或“getCookie”的函数,您也没有说明正在使用的库。

答案很可能是您的setCookie函数正在使用当前页面路径(Cookie有一个指向它们的URL路径组件),因此不同URL上的其他页面无法访问这些Cookie,但如果没有看到这些代码,就没有真正的方法来判断。

对于这些方面的JS问题,您应该尝试不同的堆栈,这不是WordPress特定的问题,而是一般的javascript问题。

结束