获取特定cookie时出现问题
problem in fetching a particular cookie
这是我用来获取特定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..");
}
}
}
从这个脚本的if
部分从来没有工作,虽然有5个cookie存储从我的网站。(包括我从这个脚本中保存的cookie)我在获取名为lastvisit
的cookie时所犯的错误是什么?
按;
拆分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];
split
的2
参数使sum=1+1=2
这样的cookie被正确读取。当通过;
分割cookie时,键可能包含一个前导空间,在比较之前要删除它。(/^ +/
是一个正则表达式,其中^
匹配字符串的开头,+
匹配一个或多个空格。)
或者,直接将其与正则比较以匹配可选的空格(*
匹配零次或多次空格字符,$
匹配字符串的结尾):
if (/^ *lastvisit$/.test(pair[0])) {
我已经测试了几种获取cookie的方法,包括使用正则表达式,下面是最正确的,性能最好的方法:
function getCookie(name) {
var cookie = "; " + document.cookie + ";";
var search = "; " + encodeURIComponent(name) + "=";
var value_start = cookie.indexOf(search);
if (value_start == -1) return "";
value_start += search.length;
var value_end = cookie.indexOf(';', value_start);
return decodeURIComponent(cookie.substring(value_start, value_end))
}
在比较字符串"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];
}
//...
}
- 让用户通过javascript访问cookie是一个安全问题
- 使用cookie(javascript)时,for循环中的If/Elseif语句出现问题
- Cookie不适用于Chrome,但它'使用Firefox(localhost)没问题
- 使用 Iframe 问题设置跨域 Cookie
- 我在设置 Cookie 时遇到问题
- jquery显示,隐藏,滑动切换与cookie的问题
- 在 PHP 中使用 js API 使用 evercookie 创建 cookie 的问题
- 保存、从 cookie 加载时出现问题
- 有关应用程序中的 Cookie 和会话 ASP.net 问题
- Jquery.cookie 插件的问题
- jquery cookie插件的问题
- cookie问题,关闭浏览器后cookie丢失
- Varnish与无cookie的域-同源政策问题
- 获取cookie值的问题
- 使用javascript的cookie问题
- 保存到cookie的常见问题的简单隐藏/显示
- 从html页面清除cookie时出现问题
- Javascript Cookie相关问题
- javascript倒计时计时器的Cookie问题
- 三星智能电视开发问题:cookie不持久