2015-07-19 105 views
0

我试图在cookie中存储页面上某个元素的状态,更准确地说是一个侧栏的展开或收缩状态。为什么cookie存储两次?

我已经设法正确地存储它,它的工作原理,但我注意到,如果我刷新页面并从扩展或收缩状态切换边栏,还会添加第二个cookie,但名称相同,但一个新的价值。

这里是日志输出什么:

expanded=false; expanded=true; PHPSESSID=2314324545 

我需要的cookie,这样如果用户想要去另一个页面上,他能看到的边栏,他离开它的前一页的方式。现在如果我有两个同名的cookie,当我检查它的值时,这会产生一个问题。

下面是我已经实现了它:

$('.expand-button').on('click', function(e) { 
    $('.pushmenu').toggleClass('expanded'); 
    $('.navbar-left').toggleClass('expanded'); 
    $('.navbar-left-2').toggleClass('small') 
    if($(window).width()+scrollbarWidth > 1240){ 
     $('.container.fluid-content').toggleClass('shrinked') 
    } 
    if($('.pushmenu').hasClass('expanded')) { 
     expandedValue = true; 
     document.cookie = 'expanded=' + expandedValue; 
     console.log(document.cookie); 
    } else { 
     expandedValue = false; 
     document.cookie = 'expanded=' + expandedValue; 
     console.log(document.cookie); 
    } 
}) 

$(window).on('load', function() { 
     //cookie is already set 
    console.log(document.cookie); 
    if(document.cookie.indexOf('expanded=true') != -1) { 
     $('.pushmenu').toggleClass('expanded'); 
     $('.navbar-left').toggleClass('expanded'); 
     $('.navbar-left-2').toggleClass('small') 
     if($(window).width()+scrollbarWidth > 1240){ 
      $('.container.fluid-content').toggleClass('shrinked') 
     } 
    } else { 
     console.log('not doing anything'); 
    } 
}) 
+3

是什么让你觉得你有两个同名的饼干? –

+0

此日志到控制台:https:// db。tt/EZfgwN1G – Radu

+2

这属于你的问题*(作为复制粘贴的文本,绝对不是**作为链接到Dropbox图片)。 –

回答

1

饼干链接到路径和域名。您可能会收到两个cookie在服务器端,如果每个人都有不同的域名,如(或更多!):

.domain.org 
.www.domain.org 

在其中您会收到饼干的顺序是最合格的域名最合格的域名名称(如该列表所示)。

我建议您安装FireBug(假设您使用FireBug兼容的浏览器,例如Firefox)并查看其中的Cookie。您将看到详细信息,如路径和域名以及到期日期。

设置路径,只要使用这样的:通过用分号分隔它们

blah=value; Domain=.domain.org 

可以指定多个参数:

blah=value; Path=/ 

同样,你可以强制与域:

blah=value; Path=/; Domain=.domain.org 

如果您使用的是HTTPS(安全域),我强烈建议您也使用安全:

blah=value; Path=/; Domain=.domain.org; Secure 

使用FireBug,您可以删除一些cookie。这取决于你,使用第一个版本(.domain.org)或最后一个(.www.domain.org)。

该差异可能来自您的前端代码(JavaScript)和您的后端代码(您的PHP)。看到你的服务器返回,看是否都被指定的路径和域作为预期,一种方法是使用wget与-S命令行选项:

wget -S http://domain.org 
wget -S http://www.domain.org 

如果允许这两个“”和“WWW “,那么你必须强制域没有www:

; Domain=.domain.org 

否则,你会得到这些重复。