Разбор cookie на JS
Делаю на сайте редирект по IP. Идея такая, что если человека нужно редиректить, то редиректим и в куки записываем "redirected=1". Делается это с той целью, чтобы не было бесконечного редиректа страницы саму на себя. Соответственно после редиректа мы проверяем есть ли "redirected=1" и больше не редиректимся. Собственно весь вопрос в том, что при проверке массива с куками - в моей конструкции происходит перезапись куки. Я понимаю, почему это происходит, но не понимаю как решить вопрос.
То есть из-за того, что в массиве куча и других кукисов - срабатывает else в проверке if(name == " redirected"). Но мне же как-то надо задать эту куку, если человек зашел на сайт в первый раз.
<script>
var cookies = document.cookie.split(";");
for(var i=0; i<cookies.length; i++)
{
var parts = cookies[i].split("="),
name = parts[0],
value = parts[1];
console.log("Name: " + name + "; Val: " + value + "");
if(name == " redirected")
{
console.log('кука есть');
if(value == "1")
{
console.log('редирект уже был');
}
else
{
console.log('редиректим');
document.cookie = "redirected=1";
}
}
else
{
console.log('Куки нету, редиректим');
document.cookie = "redirected=1";
}
}
</script>
Ответы (2 шт):
Всё оказалось проще... Сделал так:
<script>
var cookies = document.cookie.split(";");
if(cookies.indexOf("redirected=1") != -1)
{
console.log('редирект уже был');
}
else
{
console.log('редиректим');
document.cookie = "redirected=1";
}
</script>
Ошибка кода в вопросе в том, что проверка и установка осуществляется на каждой итерации цикла. Поэтому если есть хотя бы еще одна кука, редирект будет всегда.
Вместо этого, установку куки нужно вынести из цикла, а в самом цикле, устанавливать флаг, если нужная кука была найдена.
var cookies = document.cookie.split(";");
var redirected = false;
for(var i=0; i<cookies.length; i++)
{
var parts = cookies[i].split("="),
name = parts[0],
value = parts[1];
console.log("Name: " + name + "; Val: " + value + "");
if(name == "redirected" && value == "1")
{
console.log('редирект уже был');
redirected = true;
break;
}
}
if (!redirected) {
console.log('Куки нету, редиректим');
document.cookie = "redirected=1";
}