Сеансы могут использоваться для обеспечения немедленной проверки того, было ли проведено голосование:
// if session hasn't voted
if(!$_SESSION['voted']){
// VOTING LOGIC
// set session to have voted
$_SESSION['voted'] = true;
}
Однако одни сеансы не гарантируют, что один пользователь не сможет проголосовать снова (сеансы немедленно теряютсяпосле очистки кэша / файлов cookie браузера) После запуска логики голосования вы захотите сохранить IP-адрес, захваченный с $_SERVER['REMOTE_ADDR']
.
// if session hasn't voted
if(!$_SESSION['voted']){
// if ip address hasn't voted
if(!$ip_addresses[$_SESSION['REMOTE_ADDR']]){
// VOTING LOGIC
// set session and ip address to have voted
$_SESSION['voted'] = true;
$ip_addresses[$_SESSION['REMOTE_ADDR']] = true;
}
}
. IP-адреса не следует извлекать целиком, как этого требует пример.,Вместо этого вам следует запросить внешний носитель (файл / БД), чтобы определить, проголосовал ли данный клиент или нет.Конечно, это всего лишь пример реализации, однако в этом направлении я бы направился к быстрому сценарию для выполнения задачи.Вы также захотите обеспечить освобождение IP-адресов через определенное время, чтобы последующие подключения с одинаковыми IP-адресами, но с разными клиентами могли голосовать.
Это действительно зависит от того, насколько вы хотите уменьшить количество дублированных голосов.Регистрация пользователей и ограничения, основанные на учетных записях пользователей, или ограничения голосования, основанные на адресах электронной почты, которые требуют подтверждения, были бы значительно более надежными, однако накладные расходы здесь намного больше, чем я могу описать здесь и сейчас.