Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > запись в cookie на javascrip


Автор: Cheizer 3.4.2011, 13:47
Здравствуйте! Помогите разобраться с такой темой, как записать информацию в куки пользователя с помощью javascript?

А ситуация следующая:
есть функция вызова по времени (setTimeout + Trigger) модульного окна (fancybox) на сайте (например человек зашел на сайт и через пять секунд вылетает модульное окно с информацией), и что бы нее показывать окно два раза одному пользователю в течении одного дня, я решил записывать в куки по времени, но недостаточно знаний к сожалению, накопал где то такой код, делает то что мне нужно, но не могу разобраться в нем: 

Код

var timesRemain = 1 - 1;
    document.cookie="startSessionTimes="+timesRemain+"; path=/;";
    document.cookie="start=1301238541; path=/; expires=Mon, 26 Mar 2012 15:09:01 GMT;";




//а ниже пример с функцией:

Код

function start() {
    jQuery("#id_a").trigger("click");


//вот этот код который должен записывать в куки
var timesRemain = 1 - 1;
    document.cookie="startSessionTimes="+timesRemain+"; path=/;";
    document.cookie="start=1301238541; path=/; expires=Mon, 26 Mar 2012 15:09:01 GMT;";


}
$(document).ready(function(){
   //вызов окна
    });
    setTimeout(start, 5000);
});


ребята, подскажите у кого был подобный опыт, как реализовать это?

Автор: нуп 3.4.2011, 16:05
http://www.elated.com/articles/javascript-and-cookies/  

Автор: Cheizer 3.4.2011, 18:42
Цитата(нуп @ 3.4.2011,  16:05)
http://www.elated.com/articles/javascript-and-cookies/

Спасибо за информацию, но все же я не до конца понял значения, в expires я так понял должно быть date? А что тогда содержит start=1301238541 , что это за цифры? И как подскажите это все позволит не вызывать окно если обновить страницу снова через 5 секунд?

Код

function start() {
    jQuery("#id_a").trigger("click");
//вот этот код который должен записывать в куки
var timesRemain = 1 - 1;
    document.cookie="startSessionTimes="+timesRemain+"; path=/;";
    document.cookie="start=1301238541; path=/; expires=date;";
}
$(document).ready(function(){
   //вызов окна
    });
    setTimeout(start, 5000);
});

Автор: нуп 3.4.2011, 18:55
поставь куку на день, и проверяй функцией если нету куки, то показывай окно.  smile 

Автор: нуп 3.4.2011, 19:14
Цитата(Cheizer @  3.4.2011,  18:42 Найти цитируемый пост)
в expires я так понял должно быть date

да

Цитата(Cheizer @  3.4.2011,  18:42 Найти цитируемый пост)
А что тогда содержит start=1301238541 , что это за цифры? 

наверное дата переведена в секунды
Цитата(Cheizer @  3.4.2011,  18:42 Найти цитируемый пост)
 И как подскажите это все позволит не вызывать окно если обновить страницу снова через 5 секунд?

проверить куку

Автор: Cheizer 3.4.2011, 21:34
Цитата(нуп @ 3.4.2011,  18:55)
поставь куку на день, и проверяй функцией если нету куки, то показывай окно.  smile

как поставить куку на день? smile 

Приведите пример пожалуйста.

И зачем дата в секунды переведена? 
И непонятно значение timesRemain = 1 - 1;

Автор: нуп 3.4.2011, 21:47
Код

function set_cookie ( name, value, date )
{
  var cookie_string = name + "=" + escape ( value );

  if ( date )
  {
    cookie_string += "; expires=" + date;
  }
  
  document.cookie = cookie_string;
}
var now= new Date()
 var expireDate= new Date()
 expireDate.setTime(now.getTime() + 60*60*24*365*1000);
   
set_cookie("name", "value", expireDate);


Автор: Cheizer 4.4.2011, 16:28
А подскажите многоуважаемый "нуп" smile  а как сделать так, что бы при вызове окна когда пользователь зашел на страницу, куки записывали на три часа например, и если в течении трех часов обновить, то окно не вызовется через 5 секунд снова, а по истечении трех часов, опять если пользователь обновит старничку, опять окно запустится через 5 секунд. 
Как вот на три часа поставить кукис? И в каком месте сделать проверку на это? Плиз подскажите...

Автор: Котокобра 4.4.2011, 17:06
Cheizer, в приведенном коде, вместо 

Код

60*60*24*365*1000

(1000 лет) поставь столько, сколько тебе нужно в секундах  smile 

Автор: Cheizer 4.4.2011, 18:49
Цитата(Котокобра @ 4.4.2011,  17:06)
Cheizer, в приведенном коде, вместо 

Код

60*60*24*365*1000

(1000 лет) поставь столько, сколько тебе нужно в секундах  smile

smile вот спасибо, но место для проверки, что бы запускать окно или нет, в какое место то вставить проверку по моему коду?

Автор: Котокобра 4.4.2011, 19:15
рабочий код. думаю, где расположить функцию вызова попапа, догадаешься  smile 


Код

<html>
<head>
</head>

<body>


<script>

var cookieName = 'check';
var cookieValue = 'true';
var сookieExist = 1000*60; // кука на одну минуту
var checkCookie = document.cookie;

if(checkCookie.indexOf(cookieName)==-1) {

    alert('no cookie');

    var exp = new Date();
    exp.setTime(exp.getTime() + сookieExist);
    document.cookie = cookieName + "=" + cookieValue + "; expires=" + exp.toGMTString();
}
else {

    alert('cookie is "' + checkCookie + '"');

}


</script>

</body>
</html>

Автор: нуп 4.4.2011, 19:27
Цитата(Котокобра @  4.4.2011,  17:06 Найти цитируемый пост)
1000 лет) поставь столько, сколько тебе нужно в секундах  smile  


Это на 1 год  smile 

Автор: Котокобра 4.4.2011, 19:28
да, я уже понял. исправился   smile 

Автор: Cheizer 4.4.2011, 20:23
Урраааааааа Спасибо вам НУП и Котокобра!!! Все заработала! smile
Низкий поклон!
Код

<script type="text/javascript">
var cookieName = 'check';
var cookieValue = 'true';
var сookieExist = 1000*60; // кука на одну минуту
var checkCookie = document.cookie;
if(checkCookie.indexOf(cookieName)==-1) {

//тут вызов функции модального окна с контентом
function start() {
jQuery("#hidden_a").trigger("click");
}
$(document).ready(function(){
    if ('function' != typeof jQuery.fancybox) return true;
    jQuery("#hidden_a").fancybox({
        'hideOnOverlayClick':false,
        'hideOnContentClick': false,
        'titleShow'  : false
    });
    setTimeout(start, 5000);   //окно вызывается через пять секунд автоматически
});

//устанавливается новое время после вызова окна
    var exp = new Date();
    exp.setTime(exp.getTime() + сookieExist);
    document.cookie = cookieName + "=" + cookieValue + "; expires=" + exp.toGMTString();
}
</script>

Код

<a href="#inline1" style="display:none;" id="hidden_a"></a>
<div style="display: none;">
<div id="inline1" style="width:600px; height:250px; overflow:auto;">
           тут контент
</div>
</div>

надеюсь пригодится еще кому то, прокомментировал надеюсь тоже правильно smile

Автор: Котокобра 4.4.2011, 20:49
 smile 

Автор: нуп 4.4.2011, 21:09
Так то на jquery все проще
Код

$.cookie(name, value);//set
var val = $.cookie(name); // get

Автор: Cheizer 11.10.2011, 15:41
Добавлено @ 15:52
Цитата(Котокобра @ 4.4.2011,  20:49)
smile

Подскажите пожалуйста! Как упростить эту функцию, что бы то же самое было, только без fancy ?!
Вызывался обычный див с контнетом smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)