我可以修改或添加JavaScript的cookie吗?

时间:2009-11-10 00:51:58

标签: javascript cookies client-side

从javascript处理浏览器cookie的确切限制是什么?我可以检查一下是否启用了cookie吗?

6 个答案:

答案 0 :(得分:40)

是的! Read this excellent article about using cookies with JavaScript

这是一个摘录代码示例。

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    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,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

至于测试它们是否已启用。我喜欢jldupont的回答。

答案 1 :(得分:7)

你写了一个cookie并尝试回读:这样,你就会知道是否启用了cookie。

答案 2 :(得分:4)

您可以使用navigator.cookieEnabled,但我不确定所有浏览器是否支持它。

有关Cookie的更多信息,请查看this

答案 3 :(得分:1)

  

我可以查看是否已启用Cookie吗?

是的,但不像你想象的那么容易。 navigator.cookieEnabled是一个非常通用的标志,它不能完全涵盖您在什么情况下设置cookie。

例如,允许会话cookie但阻止持久性cookie。所以你不会真的知道cookie集是否会成功,除非你继续尝试,通过设置一个虚拟document.cookie然后再读document.cookie来查看它是否花了。

在许多浏览器中,当禁用持久性cookie时,持久性cookie将降级为会话cookie。但不是IE,它只会阻止它。您可以尝试通过将持久性cookie和会话cookie设置为document.cookie来检测它,并查看哪些存活。

答案 4 :(得分:1)

关于通过JavaScript进行cookie操作的quirksmode上有一篇很棒的文章: http://www.quirksmode.org/js/cookies.html

答案 5 :(得分:0)

W3Schools JavaScript Cookies代码中有一个错误。在函数setCookie中这一行:

exdate.setDate(exdate.getDate()+expiredays);

JavaScript日期对象属性:

getDate() - Returns the day of the month (from 1-31)  
...  
getTime() - Returns the number of milliseconds since midnight Jan 1, 1970  
... 

getDate() plus the number of days is not going to work.  I think it should be something like this:  

expire = expiredays * 1000 * 60 * 60 * 24; // convert to milliseconds  
var exdate = new Date( today.getTime() + (expire) );

TechPatterns.com Javascript Cookie Script Get Cookie, Set Cookie, Delete Cookie Functions上的Cookie库工作得更好(Google搜索结果中的#1并不总是最好)。

我测试了IE8中两个页面的代码,第一个导致我的cookie过期日期为1/1/2038凌晨1:00。第二个示例中的代码将我的cookie过期日期设置为距我测试时间恰好1天,正如预期的那样。