2015-07-19 103 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 

否則,你會得到這些重複。