[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ежедневное событие при условии посещения
totje
Есть сайт, требующий регистрацию/авторизацию. Необходимо такое решение, чтобы зарегистрированный пользователь ежедневно вызывал какое-то событие, например, получал +1 к какому-то счетчику, НО при условии того, что он появился (Не авторизовался) на этом сайте хотя бы раз за последние 24 часа.
Как это реализовать?



Спустя 1 минута, 52 секунды (6.01.2011 - 13:02) inpost написал(а):
В кукисы заноси последний визит пользователя и его идентификатор.
Смотришь, что за пользователь пришел и проверяешь, когда пришел! Если сутки прошли - проводишь нужную тебе операцию

Спустя 37 минут, 29 секунд (6.01.2011 - 13:40) totje написал(а):
но ведь нужно учитывать то, что между двумя посещениями пользователя может пройти от пары секунд до 23часов 59минут, а необходимый интервал -24. То есть нужно обозначить эти сутки и как-то учесть то, что пользователь может зайти в 23й час первых суток, а затем в 1й час вторых - т.е. через 2 часа после первого посещения, и посчитать это за 2 выполненных условия. вот как это сделать, хотя бы просто словами, а то сам сейчас как-то никак..
или я вообще не прав и можно все гораздо проще сделать?

Спустя 11 минут, 19 секунд (6.01.2011 - 13:51) inpost написал(а):
И? Ты заносишь время не как ДЕНЬ, а конкретно минуты и секунды. Собственно полную дату, и сверяешь отличия дат. Если разница больше дня - тогда операция.

Спустя 4 минуты, 55 секунд (6.01.2011 - 13:56) kovaldm написал(а):
Так и делаешь, записываешь в куки time()+86400 и проверяешь прикаждом посещении, если time() больше того что записано в кукисах, то сбрасываешь куки и выполняешь нужное действие, если нет то ничего не делаешь.

Спустя 1 час, 4 минуты, 8 секунд (6.01.2011 - 15:00) inpost написал(а):
kovaldm
Ты прав, лучше не просто time, а тайм с + 24 часа.

Спустя 10 минут, 21 секунда (6.01.2011 - 15:11) totje написал(а):
вроде как все просто и понятно, а что насчет надежности? всмысле защиты от подделки кукисов

Спустя 50 минут, 18 секунд (6.01.2011 - 16:01) inpost написал(а):
totje
Дополнительную запись делай в БД, и если время прошло (день), то обновляешь! То есть идентификатор закешируй, сравнивай их, а если человек дату поменяет, ты с БД сверишься, там будет настоящая дата стоять последнего начисления бонуса.

Спустя 3 часа, 8 минут, 29 секунд (6.01.2011 - 19:09) totje написал(а):
вообщем слепил щас на быструю руку на основе только лишь бд, выглядит так:

$daily = $sessionrow['daily'];
if(!$daily or $daily == '')
{
$time = time()+86400;
mysql_query("UPDATE users SET daily=$time WHERE id = $sessid ");
}
else {
if (time() > $daily) {
$time = time()+86400;
//тут что-то, что нужно
mysql_query("UPDATE users SET daily=time()+86400 WHERE id = $sessid ");
}
}


все даже работает - проверил на +5сек. сойдет или лучше сделать как-то лучше? если лучше, то как?

Спустя 15 минут, 28 секунд (6.01.2011 - 19:25) inpost написал(а):
$sessionrow ?

Спустя 7 минут, 7 секунд (6.01.2011 - 19:32) totje написал(а):
inpost

$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password'");
$sessionrow = mysql_fetch_array($result);

ну вот какбы

Спустя 2 дня, 15 часов, 10 минут, 8 секунд (9.01.2011 - 10:42) totje написал(а):
правильно, нет?
к тому, что данные юзера засвечены, только не надо придираться, уже все исправлено.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.