Сессии: нажмите, чтобы поднять номер

Я хочу создать раздел голосования, чтобы, когда пользователь нажимает на ссылку, он складывал число (ограничение до одного равноправного 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-адресами, но с разными клиентами могли голосовать.

Это действительно зависит от того, насколько вы хотите сократить дублирующееся голосование. Регистрация пользователей и ограничения, основанные на учетных записях пользователей, или ограничения голосования, основанные на адресах электронной почты, которые требуют подтверждения, были бы значительно более надежными, однако накладные расходы здесь намного больше, чем я могу описать здесь и сейчас.

Другие вопросы по тегам