2012-08-08 51 views
2

我已经创建了一个Django网站,并且需要一个cookie来存储并可从网站的任何部分读取。它的JavaScript是在我需要它的每一个部分,但由于某种原因,Cookie本身被分开存储每个页面。例如。如果cookie在一个页面上等于“设置”,则它可以在另一页上未定义。下面是我使用创造,获取和读取cookie的代码(以下简称“createBannerCookie()”当一个特定的按钮,每个页面上发现,被压方法被调用) -如何在javascript中创建全局cookie?

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#banner').hide(); 
    checkBannerCookie(); 
}); 

function createBannerCookie() 
{ 
    $('#banner').hide(); 
    var exdate=new Date(); 
    exdate.setDate(exdate.getDate() + 3); 
    var c_value=escape("set") + ((exdate==null) ? "" : "; expires="+exdate.toUTCString()); 
    document.cookie='banner=' + c_value; 
} 

function getCookie(c_name) 
{ 
    var i,x,y,ARRcookies=document.cookie.split(";"); 
    for (i=0;i<ARRcookies.length;i++) 
    { 
    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); 
    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); 
    x=x.replace(/^\s+|\s+$/g,""); 
    if (x==c_name) 
    { 
     return unescape(y); 
    } 
    } 
} 

function checkBannerCookie() 
{ 
    var banner=getCookie("banner"); 
    if (banner!=null && banner!="") 
    { 
    $('#banner').hide(); 
    } 
    else 
    { 
    $('#banner').show(); 
    } 
} 
</script> 

有什么建议?

回答

7

默认情况下,cookie是只对网页在同一目录访问作为最初创建cookie的网页。请尝试添加“path = /”选项。例如

document.cookie = 
    'propertyName=test; path=/' 
0

SImon,

我认为你的问题是你的cookies的到期日期。它看起来像你设置它们在创建后过3毫秒。

尝试这样的事情在你的“createBannerCookie”功能(而不是W3Schools的版本):

function createBannerCookie() 
{ 
    $('#banner').hide(); 
    var exdate=new Date(); 
    exdate.setTime(exdate.getTime()+(3*24*60*60*1000)); // the 3 in that math is your days 
    var c_value=escape("set") + ((exdate==null) ? "" : "; expires="+exdate.toUTCString()); 
    document.cookie='banner=' + c_value; 
} 

参考:http://www.quirksmode.org/js/cookies.html

+0

这似乎并不奏效 - 如果是这种情况,Cookie将无法在只有一些页面上工作。 – SImon 2012-08-08 17:59:04