#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');
}