Вы разделяете cookie на ;
, сравнивая эти токены с lastvisit
. Вы должны сначала разделить такой токен на =
. allCookies[i]
выглядит как key=val
и никогда не будет равно lastvisit
. Если значение allCookies[i] == "lastvisit"
равно true, результат все равно будет не таким, как ожидалось, поскольку вы показываете значение 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
, равный split
, позволяет правильно читать файлы cookie, такие как sum=1+1=2
. При разбиении файлов cookie на ;
ключ может содержать начальный пробел, который перед удалением может быть удален. (/^ +/
- регулярное выражение, где ^
соответствует началу строки и +
один или несколько пробелов.)
В качестве альтернативы, сравните его непосредственно с RE для сопоставления необязательных пробелов (*
соответствует нулю или большему числу вхождений пробела, $
соответствует концу строки):
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))
}