下面是我试图弄清楚为什么它不能正常工作的例子。
它一直给我空值。
我正在尝试学习如何在一个cookie中设置多个值。
每个Cookie包含一个名称=值对,因此如果您需要存储多个单独的数据,例如用户的姓名,年龄和会员编号,则需要三个不同的Cookie。
我没有这样做,而是使用分隔符技术来拆分它,这样我就可以使用更少的cookie。
如果可以的话,请告诉我任何正确实施的例子。我已经看到了其他编程语言的一些材料,但我想知道它是如何在JavaScript中专门完成的。
<!DOCTYPE html>
<html>
<head>
<title> Using a delimiter to save on cookies used</title>
<script>
function createCookie(name, value, days, path, domain, secure) {
if (days) {
var date=new Date();
date.setTime(date.getTime()+ (days*24*60*60*1000));
var expires=date.toGMTString();
}
else var expires = "";
cookieString= name + "=" + escape (value);
if (expires)
cookieString += "; expires=" + expires;
if (path)
cookieString += "; path=" + escape (path);
if (domain)
cookieString += "; domain=" + escape (domain);
if (secure)
cookieString += "; secure";
document.cookie=cookieString;
}
function getCookie(name) {
var nameEquals = name + "=";
var crumbs=document.cookie.split('|');
for (var i = 0; i<crumbs.length; i++) {
var crumb = crumbs [i];
if (crumb.indexOf(nameEquals) == 0) {
return unescape (crumb.substring(nameEquals.length, crumb.length));
}
}
return null;
}
function deleteCookie(name){
createCookie(name, "", -1);
}
var userdata="Joe|31|Athlete";
createCookie("user", userdata);
var myUser=getCookie("user");
var myUserArray=myUser.split('|');
var name=myUserArray[0];
var age=myUserArray[1];
var profession=myUserArray[2];
</script>
</head>
<body>
</body>
</html>
答案 0 :(得分:1)
不要使用'|'作为分隔符,它在不同的浏览器中实现不同(使用诸如' - ','+','。'之类的东西作为分隔符)。当我检查firefox&gt;网站信息,它告诉我有一个cookie,但内容是Joe%7C31%7CAthlete
。在我的版本中,我将分隔符放在我们在所有内容之前定义的变量中(我使用'---',但如果你愿意,你可以更改它):
<!DOCTYPE html>
<html>
<head>
<title> Using a delimiter to save on cookies used</title>
<script>
var delimiter = "---";
function createCookie(name, value, days, path, domain, secure) {
if (days) {
var date=new Date();
date.setTime(date.getTime()+ (days*24*60*60*1000));
var expires=date.toGMTString();
}
else var expires = "";
cookieString= name + "=" + escape (value);
if (expires)
cookieString += "; expires=" + expires;
if (path)
cookieString += "; path=" + escape (path);
if (domain)
cookieString += "; domain=" + escape (domain);
if (secure)
cookieString += "; secure";
document.cookie=cookieString;
}
function getCookie(name) {
var nameEquals = name + "=";
var whole_cookie=document.cookie.split(nameEquals)[1].split(";")[0]; // get only the value of the cookie we need
// (split by the name=, take everything after the name= and then split it by ";" and take everything before the ";")
var crumbs=whole_cookie.split(delimiter); // split now our cookie in its information parts
/*for (var i = 0; i<crumbs.length; i++) {
var crumb = crumbs [i];
if (crumb.indexOf(nameEquals) == 0) {
return unescape (crumb.substring(nameEquals.length, crumb.length));
}
}*/ // sorry... i dont understand what this does ;) but it works without it
return crumbs; // return the information parts as an array
}
function deleteCookie(name){
createCookie(name, "", -1);
}
// ---------------------
// DEBUGGING PART STARTS
// ---------------------
var userdata="Joe"+delimiter+"31"+delimiter+"Athlete";
createCookie("user", userdata);
var myUserArray=getCookie("user");
var name=myUserArray[0];
var age=myUserArray[1];
var profession=myUserArray[2];
alert(myUserArray[0]);
alert(myUserArray[1]);
alert(myUserArray[2]);
// ---------------------
// DEBUGGING PART ENDS
// ---------------------
</script>
</head>
<body>
</body>
</html>
当我对此进行测试时,它可以正常工作:它将“Joe”保存在name
中,将{31}保存在age
中,将“运动员”保存在job
中
我添加了一些调试警报,以便你也可以测试它
再见,我希望我能帮忙:)。
答案 1 :(得分:1)
好吧,关于Sven L提到的分隔符你已经 Joe%7C31%7CAthlete 因为
至于提及的其他分隔符,请参阅Allowed characters in cookies。
至于我在firefox中,' - '和'。'以单字节存储未编码但“+”被转换为其编码值%2B
选择不会被编码的分隔符是有意义的。这样分隔符只需要1个字节。因此,考虑到其大小限制为4kB,可以将更多有用的东西放入cookie值。
答案 2 :(得分:0)
对我而言,您的代码可以在Chrome上完美运行。
但是,我必须在Web服务器上运行它 - 如果我只是打开一个html文件,它就不会保存任何cookie。
如果您的计算机上安装了python,您可以使用此命令从包含您要提供的html文件的目录中运行minimalistic python服务器:
$ python -m SimpleHTTPServer 8000
然后,只需使用浏览器转到http://127.0.0.1:8000
,网站即可运行。
当然,您也可以使用任何其他http服务器,例如apache或任何您喜欢的服务器。