我正在使用原型,但找不到任何内置扩展来设置或检索 cookie。在谷歌搜索了一下之后,我看到了几种不同的方法。我想知道您认为在 JavaScript 中获取 cookie 的最佳方法是什么?
EvilSyn
问问题
17200 次
4 回答
9
我使用这个程序:
function ReadCookie(name)
{
name += '=';
var parts = document.cookie.split(/;\s*/);
for (var i = 0; i < parts.length; i++)
{
var part = parts[i];
if (part.indexOf(name) == 0)
return part.substring(name.length)
}
return null;
}
效果很好。
于 2008-10-07T20:30:02.897 回答
2
每当我需要访问它时,我都会使用document.cookie,基本上就是那篇文章中概述的方式。警告,我从来没有使用过原型,所以可能有更简单的方法,你只是没有遇到过。
于 2008-09-25T20:32:56.073 回答
2
如果其他人需要它,我已经修复了Diodeus 的代码,以解决PhiLho在尝试获取 cookie 值时对部分匹配的担忧。
function getCookie(c_name) {
var nameEQ = c_name + '=';
var c_start = 0;
var c_end = 0;
if (document.cookie.substr(0, nameEQ.length) === nameEQ) {
return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length));
} else {
c_start = document.cookie.indexOf('; ' + nameEQ);
if(c_start !== -1){
c_start += nameEQ.length + 2;
c_end = document.cookie.indexOf(';', c_start);
if (c_end === -1) {c_end = document.cookie.length;}
return document.cookie.substring(c_start, c_end);
}
}
return null;
}
我最近还构建了一个更紧凑的 RegExp,它也应该可以工作:
function getCookie(c_name){
var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)"));
return (ret !== null ? ret[1] : null);
}
我做了一些速度测试,似乎表明在 PhiLo、QuirksMode 和这两个实现中,上面的非 RegExp 版本(使用 indexOf 非常快,并不意外)是最快的。http://jsperf.com/cookie-fetcher
于 2012-06-19T21:24:44.587 回答
-2
我用这个。它是可靠的:
function getCookie(c_name) {
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
{
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
}
}
return ""
}
于 2008-09-25T20:32:44.293 回答