Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не сохраняются cookie (https://javascript.ru/forum/misc/78289-ne-sokhranyayutsya-cookie.html)

АндрейD 21.08.2019 21:54

Не сохраняются cookie
 
Не могу разобраться, почему cookie работают только в сессии и не сохраняются после закрытия браузера?
<body>
		<p>Фамилия</p>
		<input type="text" value="" id="surname">
		<p>Имя</p>
		<input type="text" value="" id="name">
		<p>Отчество</p>
		<input type="text" value="" id="parent">
	</body>

var inp = document.querySelectorAll('input');
document.addEventListener('input', setCookie);
function setCookie() {
	var date = new Date();
	date.setDate(date.getDate() + 1);
	date = date.toGMTString();	// toUTCString - пробовал
	for(var i = 0; i < inp.length; i++) {
		document.cookie = inp[i].getAttribute('id') + "=" + inp[i].value + "; expires=" + date + '; path=/';
	}
}

getCookie();
function getCookie() {
	var cook = decodeURIComponent(document.cookie);
	var arr = cook.split(';');
	for(var i = 0; i < arr.length; i++) {
		var [k, v] = arr[i].split('=');    // k - ключ cookie; v - значение cookie
		if(k == inp[i].getAttribute('id')) {
			inp[i].value = v;
		}
	}	
}

ksa 22.08.2019 07:39

Цитата:

Сообщение от АндрейD
var [k, v] = arr[i].split('=');

Это что за конструкция?

рони 22.08.2019 08:16

ksa,
Деструктурирующее присваивание

ksa 22.08.2019 08:28

У меня такое показывает как ошибку... :(
Но это "спец.редактор" и он про такое не знает как и я.

АндрейD, вот работающий вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<p>Фамилия</p>
<input type="text" value="" id="surname">
<p>Имя</p>
<input type="text" value="" id="name">
<p>Отчество</p>
<input type="text" value="" id="parent">
<script type='text/javascript'>
document.addEventListener('input', setCookie);
getCookie();
function setCookie() {
	var date = new Date();
	var inp = document.querySelectorAll('input');
	date.setDate(date.getDate() + 1);
	date = date.toGMTString();	
	for(var i = 0; i < inp.length; i++) {
		document.cookie = inp[i].id + "=" + inp[i].value + "; expires=" + date + '; path=/';
	};
};
function getCookie() {
	var arr = document.cookie.split('; ');
	for(var i = 0; i < arr.length; i++) {
		var v = arr[i].split('=');    
		var k=v[0];
		v=v[1];
		var o=document.getElementById(k);
		if(o) {
			o.value = v;
		};
	};
};
</script>
</body>
</html>

Ищи различия... ;)

АндрейD 22.08.2019 23:15

Цитата:

Сообщение от ksa
У меня такое показывает как ошибку...
Но это "спец.редактор" и он про такое не знает как и я.

У меня Notepad++ Ошибок нет.

АндрейD 22.08.2019 23:19

Цитата:

Сообщение от ksa
Ищи различия...

Спасибо за помощь! Однако, в вашем коде cookie тоже работают только в сессии. К тому же браузер ругается на 40 строку: "Пустая строка не может быть аргументом метода getElementById()."

Так что пока не решено. Жду помощи.

Rise 23.08.2019 01:45

АндрейD,
куки могут не работать, если протокол в адресной строке file://, а не http://, т.е. нужно эмулировать сайт.

ksa 23.08.2019 07:20

Цитата:

Сообщение от АндрейD
Однако, в вашем коде ...

Это полностью работающий код.

Malleys 23.08.2019 09:34

АндрейD, вы можете для хранения своей печеньки использовать локальное хранилище. Я понимаю, что вы хотите, чтобы то, что вводит пользователь сохранялось. Для этой цели как раз подходит локальное хранилище! Вот ваш пример, который я изменил...
<p>Фамилия</p>
<input id="surname">
<p>Имя</p>
<input id="name">
<p>Отчество</p>
<input id="parent">

<script>
	var inp = document.querySelectorAll("input");
	document.addEventListener("input", setCookie);

	function setCookie() {
		var cookie = [];
		for(var i = 0; i < inp.length; i++) {
			cookie.push({
				id: inp[i].id,
				value: inp[i].value
			});
		}
		localStorage.cookie = JSON.stringify(cookie);
	}
	(function getCookie() {
		var cookie = JSON.parse(localStorage.cookie || "[]");
		for (var i = 0; i < cookie.length; i++) {
			var input = document.getElementById(cookie[i].id);
			if(input) input.value = cookie[i].value;
		}
	})();
</script>


АндрейD, вы поняли, что поменял в вашем коде ksa в посте №4? А то он утверждает, что у него полностью работающий код, а на деле получается, что он просто взял и добавил в начале бессмысленный комментарий к вашему коду и ещё в конце деструктуризацию руками раскрыл (типо человек-Бабель)... Я не понял, зачем нужны такие различия, не несущие никакой практической пользы!

ksa 23.08.2019 10:20

Цитата:

Сообщение от Malleys
а на деле получается ...

Я пытался максимально сохранить идею автора. :D
Дабы он увидел, что он делал не так.

Для работы с куками больше подходят вот такие функции
https://ruseller.com/lessons.php?id=593


Часовой пояс GMT +3, время: 00:26.