从javascript处理浏览器cookie的确切限制是什么?我可以检查一下是否启用了cookie吗?
答案 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天,正如预期的那样。