Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с кукисами (https://javascript.ru/forum/events/33884-problema-s-kukisami.html)

zevilz 12.12.2012 18:11

Проблема с кукисами
 
При нахождении на любой странице сайта через 40 секунд появляется окно подписки. При нажатии кнопки 'закрыть' окно подписки появится только через сутки. При нажатии кнопки подтверждения подписки окно появится только через 9999*9999*9999 мкс
$(document).delay(40000).queue(function() {
	if (!getcookie("SUBSCR")) {
		$('#subscribeOverlay').fadeIn("slow");
		$('#subscribeWindow').fadeIn("slow");

		$('#subscribeWindowClose').click(function(){
			$('#subscribeOverlay').fadeOut("slow");
			$('#subscribeWindow').fadeOut("slow");
			setcookie( "SUBSCR", "1" , 3600*24*1000);
		});
		$('#subscr_submit').click(function(){
			$('#subscribeOverlay').fadeOut("slow");
			$('#subscribeWindow').fadeOut("slow");
			setcookie( "SUBSCR", "2" , 9999*9999*9999);
		});
	}
});
function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString() : '');else return false;}
function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}


Но проблема в том, что запись в куки создается для каждой страницы.
Код:

Имя:        SUBSCR
Содержание:        1
Домен:        site.net
Путь:            /faq
Отправить:        Любой тип соединения
Доступный для скрипта:        Да
Создано:        среда, 12 декабря 2012 г. 19:34:26
Срок действия истекает:        четверг, 13 декабря 2012 г. 19:34:26

Код:

Имя:        SUBSCR
Содержание:        1
Домен:        site.net
Путь:          /search
Отправить:        Любой тип соединения
Доступный для скрипта:        Да
Создано:        среда, 12 декабря 2012 г. 19:48:20
Срок действия истекает:        четверг, 13 декабря 2012 г. 19:48:20

При закрытии окна на одной странице на другой она опять вылезает через 40 секунд. При закрытии нового окна добавляется новая запись в куки. Раньше такого не было, создавалась только одна запись в куки для всех страниц сайта, а сейчас не пойму что произошло. Мож я где накосячил?

Dremlin 12.12.2012 18:27

Под отладчиком браузера пробовали смотреть, может быть ошибку покажет?! :)

Dremlin 12.12.2012 18:36

Сходу просмотрев код, подозрительным кажется строчка
return c[1] ? c[1] : false;

zevilz 12.12.2012 18:39

Ошибок нет. При закрытии окна на главной пишется в куки путь /. Окно больше не появляется на других страницах. Раньше при закрытии окна на любой странице путь был /

zevilz 12.12.2012 18:48

а как прописать путь при добавлении в куки?

Dremlin 12.12.2012 18:52

document.cookie="foo=bar; path=/; expires=Mon, 01-Jan-2001 00:00:00 GMT";

Как то так :)

Dremlin 12.12.2012 18:55

Где / корневой каталог

Dremlin 12.12.2012 18:56

Цитата:

Путь установки

"path=/" — этим параметром задается путь (каталог), для которого действительна кука. Сейчас path имеет значение "/", это ничто иное, как корневой каталог, поэтому кука будет доступна для чтения абсолютно всем каталогам сайта. В случае если доступ к куке должен быть ограничен, то параметр path просто не указываем или указываем в нем общий родительский каталог, и кука будет установлена для конкретного каталога, но специфика такова, что кука будет доступна всем его подкаталогам, в то же время — не видна смежным и родительским каталогам.

Для чего это? Представим элементарную ситуацию: интернет-кафе, сначала пришел пользователь Вася, поработал со своей страницей в соцсети, а после него пришел Петя и, на том же компьютере, в той же сети, поработал со своей страницей. Страницы участников находятся в одном домене, но лежат, как правило, в смежных каталогах. К примеру: страница Васи — http://socset.com/vasya, страница Пети — http://socset.com/petya. Можно представить, какой будет хаос, если куки будут устанавливаться в корневой каталог: Вася сможет оперировать куками Пети и наоборот. Я думаю ни одному, ни другому такой вариант не понравится. Поэтому, в данном случае, будет уместно, если куки будут привязаны только к каталогу конкретного пользователя, следовательно, ко всем его подкаталогам.
Взял с сайта:
http://www.xiper.net/learn/javascrip...n-cookies.html

zevilz 12.12.2012 19:17

Спасибо большое, помогло.
function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString()+'; path=/' : '');else return false;}

Сейчас хоть разобрался в этой функции)

Dremlin 12.12.2012 19:30

JavaScript порой такие потёмки ;)


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