Реализация системы голосования, не требуя регистрации

Вот тот же алгоритм на Java, если кому-то интересно.

boolean isPolygonsIntersecting(Polygon a, Polygon b)
{
    for (int x=0; x<2; x++)
    {
        Polygon polygon = (x==0) ? a : b;

        for (int i1=0; i1<polygon.getPoints().length; i1++)
        {
            int   i2 = (i1 + 1) % polygon.getPoints().length;
            Point p1 = polygon.getPoints()[i1];
            Point p2 = polygon.getPoints()[i2];

            Point normal = new Point(p2.y - p1.y, p1.x - p2.x);

            double minA = Double.POSITIVE_INFINITY;
            double maxA = Double.NEGATIVE_INFINITY;

            for (Point p : a.getPoints())
            {
                double projected = normal.x * p.x + normal.y * p.y;

                if (projected < minA)
                    minA = projected;
                if (projected > maxA)
                    maxA = projected;
            }

            double minB = Double.POSITIVE_INFINITY;
            double maxB = Double.NEGATIVE_INFINITY;

            for (Point p : b.getPoints())
            {
                double projected = normal.x * p.x + normal.y * p.y;

                if (projected < minB)
                    minB = projected;
                if (projected > maxB)
                    maxB = projected;
            }

            if (maxA < minB || maxB < minA)
                return false;
        }
    }

    return true;
}
18
задан Nate 19 January 2012 в 17:50
поделиться

5 ответов

Да, вы можете использовать cookie и установить срок действия очень далеко в будущем; однако ничто не мешает кому-либо очистить кэш и снова проголосовать.

Лучше всего использовать cookie и не разрешать голоса с одного и того же IP-адреса в течение 15 минут друг от друга ... без регистрации, вот и все. лучшее, что вы можете сделать.

23
ответ дан 30 November 2019 в 06:51
поделиться

Вы можете идентифицировать пользователей не только по их IP-адресу. Например, вы можете включить IP + всю информацию заголовка запроса (такую ​​как браузер, номера версий, возможности) и хэш. Это будет более или менее однозначно идентифицировать вашего пользователя (хотя, к сожалению, не на 100%).

8
ответ дан 30 November 2019 в 06:51
поделиться

Вы можете разрешить им входить в систему, используя OpenId , это позволит им использовать существующую учетную запись для голосования, и им не придется создавать новую учетную запись.

У Google, Yahoo и других есть службы, позволяющие вам аутентифицировать пользователей.

Если вы не аутентифицируете пользователей каким-либо образом, система голосования будет открыта для злоупотреблений.

4
ответ дан 30 November 2019 в 06:51
поделиться

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

Рассмотрите возможность принятия этой реальности в духе Дж. Генри Ловенгарда , который, когда он настраивал сайт 100 лучших на WFMU еще в середине 1990-х при наличии кнопки на странице «ваш голос подсчитан» с надписью «Вернитесь и проголосуйте еще!»

Фактически, перейдите туда сейчас и проголосуйте за (или против) StackOverflow!

3
ответ дан 30 November 2019 в 06:51
поделиться

Пользовательский агент IP + намного более уникален, чем IP; не уверен, подходит ли он для ваших целей. Если вы отправите им файл cookie, он будет возвращен этим компьютером (если они используют один и тот же браузер) до тех пор, пока cookie остается, независимо от IP-адреса, но обратите внимание, что пользователь может избавиться от файла cookie в любое время. .

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

3
ответ дан 30 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: