Сессии: нажмите, чтобы поднять номер
Я хочу создать раздел голосования, чтобы, когда пользователь нажимает на ссылку, он складывал число (ограничение до одного равноправного IP-адреса или что-то в этом роде).
Например:
Селтикс: 0 (Нажмите, чтобы проголосовать) ----------- это клик
Лейкерс: 0 (Нажмите, чтобы проголосовать)
Селтикс: 1
Лейкерс: 0
Как это возможно с сессиями или просто php-кодированием?
есть идеи?
1 ответ
Сессии могут быть использованы для немедленной проверки того, было ли проведено голосование:
// 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-адресами, но с разными клиентами могли голосовать.
Это действительно зависит от того, насколько вы хотите сократить дублирующееся голосование. Регистрация пользователей и ограничения, основанные на учетных записях пользователей, или ограничения голосования, основанные на адресах электронной почты, которые требуют подтверждения, были бы значительно более надежными, однако накладные расходы здесь намного больше, чем я могу описать здесь и сейчас.