获取特定cookie的问题

时间:2011-09-24 13:41:38

标签: javascript cookies

这是我用来获取特定Cookie的脚本lastvisit

编辑后

// This document writes a cookie
// called from index.php
window.onload = makeLastVisitCookie;

function makeLastVisitCookie() {
var now = new Date();
var last = new Date();
now.setFullYear(2020);
// set the cookie
document.cookie = "lastvisit=" + last.toDateString() + ";path=/;expires=" + now.toGMTString();
var allCookies = document.cookie.split(";");
for( var i=0 ; i < allCookies.length ; i++ ) {
    if(allCookies[i].split("=")[0]== "lastvisit") {
        document.getElementById("last_visit").innerHTML = "You visited this site on" + allCookies[i].split("=")[1];
    } else {
                alert("testing..testing..");
              }
  }
 }

虽然从我的网站上存储了5个cookie,但if部分从此脚本无效。 (包括我从此脚本保存的cookie)在获取名为lastvisit的cookie时我犯的错误是什么?

2 个答案:

答案 0 :(得分:1)

您正在通过;分割Cookie,并将这些令牌与lastvisit进行比较。您需要先将=这样的令牌拆分。 allCookies[i]看起来像key=val,永远不会等于lastvisit。如果allCookies[i] == "lastvisit"为真,则结果仍然不符合预期,因为您显示的allCookies[i + 1]值为this=the_cookie_after_lastvisit

if(allCookies[i].split("=") == "lastvisit") {应该是:

var pair = allCookies[i].split("=", 2);
if (pair[0].replace(/^ +/, "") == "lastvisit") {

"You visited this site on" + allCookies[i+1];应该是:

"You visited this site on" + pair[1];

2的{​​{1}}参数可以正确读取split之类的Cookie。在按sum=1+1=2拆分Cookie时,密钥可能包含一个前导空格,在比较之前会将其删除。 (;是一个正则表达式,/^ +/匹配字符串的开头,^一个或多个空格。)

或者,将它直接与RE进行比较以匹配可选空格(+匹配零个或多个空格字符的出现,*匹配字符串的结尾):

$

我已经测试过几种获取cookie的方法,包括使用正则表达式,以下是最正确的表现方式:

if (/^ *lastvisit$/.test(pair[0])) {

答案 1 :(得分:0)

在与字符串"lastvisit"进行比较之前,您需要删除Cookie密钥周围可能的空白区域。这可以使用正则表达式方便地完成。 /^\s+/匹配开头的所有空格,/\s+$/匹配末尾的所有空格。匹配项由空字符串替换,即删除:

for( var i = 0 ; i < allCookies.length ; i++ ) {
    var c = allCookies[i].split("="); // split only once
    var key = c[0].replace(/^\s+/, '').replace (/\s+$/, ''); // remove blanks around key
    if (key == "lastvisit") {
        document.getElementById("last_visit").innerHTML = "You visited on " + c[1];
    }
    //...
} 
相关问题