2015-05-18 2 views
0

Я, чтобы ограничить доступ к конкретной странице, если она посетила более чем один раз в день, так что я сделал следующее:PHP - сохранить куки после очистки кэша

<?php 

    if(! isset($_COOKIE["VisitCount"])){ 
     setcookie("VisitCount", "1", strtotime('today 23:59')); 
    } 

    if($_COOKIE["VisitCount"] > 1){ 
     echo "<script>alert('You can only play once a day'); location.href='http://example.com';</script>"; 
     exit(); 
    } 
    else { 
     setcookie("VisitCount", ($_COOKIE["VisitCount"] + 1), strtotime('today 23:59')); 
    } 

?> 

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

EDIT:

Я добавил колонку «время» на моем столе, я полагаю, я должен использовать оператор If, чтобы проверить, если в последний раз в течение последних 24 часов, но я не знаю, как сделать это.

Кроме того, доступ ограничен один раз в день, но не точно каждые 24 часа с момента его сброса в полночь, для этого требуется другой код? или тот, который я представил выше, может работать (слегка изменен)?

+1

Я бы постарался с чем-то стойким, как с хранилищем db. – Masiorama

+0

Итак, зарегистрируйте пользователя в базе данных или аналогично, что их последним доступом была дата x. Если текущая дата не равна x, разрешите доступ. –

+0

Вы не можете сохранять такие файлы cookie. Если бы вы могли, это бы побеждало цель очистить кеш. Ваша единственная ставка заключается в том, чтобы требовать логин и лимит один раз за вход. Но ничто не остановило бы у кого-то от нескольких логинов, если бы они не были похожими на учет за регистрацию. –

ответ

0

Ведение журнала на стороне клиента не является хорошей идеей для ограничения чего-либо. Вы должны ограничить его на стороне сервера уникальным свойством клиента.

С этой целью вы должны использовать IP-адрес клиента и записать его в таблицу базы данных с последней меткой времени доступа. Конечно, пользователь может изменить свой IP-адрес, возможно, но это сложнее, чем удаление файлов cookie/кеш.

Другая возможность, кроме IP-адреса, не указана - манипуляция возможна очень просто. Нет 100% шансов ограничить один запрос/действие.

+0

Вне локальной сети maniuplating IP-адрес для TCP относительно твердый (вы не можете обманывать его, но вы можете использовать службу анонимации), но это далеко не подходит как уникальный идентификатор пользователей. – symcbean

+0

Да, но вы можете изменить пользовательские агенты и т. Д. Очень легко. Я не говорю о манипуляциях, а просто о получении нового. Здесь, в Германии, вы можете повторно подключить свой маршрутизатор к большинству провайдеров и мгновенно получить (~ 30 секунд) новый IP-адрес. Кроме того, вы можете просто использовать свой смартфон. – Richard

0

Короткий ответ заключается в том, что вы не можете применять такое ограничение.

Использование файлов cookie работает только при условии, что пользователь не удаляет файл cookie.

То же самое для других хранимых данных на стороне клиента.

Вы можете сделать это (значительно) более трудным для кого-то, чтобы удалить идентификатор, связанный с каждым клиентом с помощью evercookies or browser fingerprinting

Вы не можете использовать IP-адрес (бесплатный Wi-Fi везде и с помощью Tor вы даже не нужно идти на прогулку).

Вы можете заставить пользователя зарегистрироваться на адрес электронной почты и потребовать, чтобы адрес электронной почты был проверен (путем отправки по электронной почте OTP по адресу), но тогда вы можете обеспечить только одну игру на каждый адрес электронной почты в день - насколько это сложно получить бесплатный адрес электронной почты?

Смежные вопросы