30 дней с момента первого посещения Javascript

#javascript #web #cookies

#javascript #веб #файлы cookie

Вопрос:

Мне нужно показать модальную страницу на моей веб-странице пользователям через 30 дней после первого посещения.

Я создал файл cookie, срок действия которого истекает через 1 год после первого посещения, я попытался вычесть 335 дней из даты истечения срока действия, чтобы было 30 дней с даты создания, но это не работает.

Вот мой код cookie

 function GetCookie(name) {
  var arg=name "=";
  var alen=arg.length;
  var clen=document.cookie.length;
  var i=0;
  while (i<clen) {
    var j=i alen;
    if (document.cookie.substring(i,j)==arg)
      return "here";
    i=document.cookie.indexOf(" ",i) 1;
    if (i==0) break;
  }
  return null;
}
function testFirstCookie(){
    var visit=GetCookie("FirstTimeVisitCookie");
    if (visit==null){
      //it does something
   
   }
        var expire=new Date();
       expire=new Date(expire.getTime() (1000 * 60 * 60 * 8760)); //expires in 1 year
       document.cookie="FirstTimeVisitCookie=here; expires=" expire   "; path=/";

       var month = new Date(expire.getTime() - (1000 * 60 * 60 * 8040)); // I substracted 335 days from expiration date to get 30 days from the creation of the cookie
        var time_now = new Date();
       time_now  = time_now.getTime();

        if (time_now >= month) {

            //shows a popup
         }
            
       
}
$(document).ready(function(){
    testFirstCookie();
});
  

Любая помощь была бы высоко оценена!

Комментарии:

1. Файл cookie не будет работать, если пользователь впоследствии использует другой браузер. Для этого требуется решение, основанное на базе данных.

Ответ №1:

Вам нужно будет добавить код на свой внутренний сервер, чтобы определить, кто просматривает, а затем проверить, были ли они там в течение определенного времени после предыдущего. Однако вам нужно будет использовать:

  • Отслеживание IP: IP-адреса могут меняться
  • Идентификаторы локального хранилища: Если браузер изменен, это не сработает.
  • Файлы cookie: срок их действия истекает, и они могут испортиться в разных браузерах
  • Перенаправление пользователя с указанием идентификатора в URL: нарушает правила Google

Комментарии:

1. веб-сайт на самом деле создан для пожилых людей, они, вероятно, не будут пытаться обойти cookie

Ответ №2:

Сначала, когда вы хотите сравнить 2 даты, вы должны преобразовать их обе в миллисекунды. В вашем коде time_now — это миллисекунды, но месяц — это объект даты, который вы должны преобразовать в миллисекунды с помощью функции getTime().

Во-вторых, вы устанавливаете разрешенную дату для отображения всплывающего окна через 30 дней, и даже если код полностью корректен, оператор if не выполняется. потому что вы должны подождать 30 дней, чтобы условие сбылось, или попробовать с поддельной датой для тестирования.

В-третьих, как сказал @Dexygen, файл cookie не будет работать, если пользователь впоследствии использует другой браузер. Для этого требуется решение, основанное на базе данных.

 var expire = new Date();
expire = new Date( expire.getTime()   (365 * 24 * 60 * 60 * 1000) ); //expires in 1 year
document.cookie="FirstTimeVisitCookie=here; expires=" expire   "; path=/";


var month = new Date(expire.getTime() - ( 335 * 24 * 60 * 60 * 1000 ));  // I substracted 335 days from expiration date to get 30 days from the creation of the cookie
month = month.getTime()
var time_now = new Date();
time_now  = time_now.getTime();
var time_nowFake = new Date( time_now   (30 * 24 * 60 * 60 * 1000) ).getTime();

if (time_now >= month ) {

  console.log("doesn't work");
}

if (time_nowFake >= month) {
  console.log('yaaaaaay');
}