Есть каталог сайтов. Самописный, млин. Так вот, все вроде написано и работает. Осталось только сделать проверку на повторное голосование за сайт и голосавание от самого админа. Я просто не много не понимаю сам принцип...
Требуется:
— запретить голосовать одному посетителю больше одного раза за сайт;
— запретить голосовать администратору сайта (тот, кто будет заполнять форму о добавлении сайта в каталог) за свой же ресурс.
Я так понимаю, что все это реализуется записью IP-адреса каждого проголосовавшего в базу. Затем просто нужно будет искать при очередном добавлении голоса совпадения. Плюс еще нужно будет записывать IP'шник админа, чтоб и его потом проверять. Так ли я все это понимаю? Может есть какие-то мелкие ньюансы, облегчающие работу со всем этим? Какие вообще варианты есть? Может эффективней просто в файл все IP'шники записывать?
По поводу идентификации пользователей по IP. А ты не думал, что бывает такое, что юзеры ходят в инет через проксю? Например организация из 1000 человек может сидеть за одной проксей, а ты их всех будешь идентифицировать как одного человека. Или тот же диал-ап — там IP-шник из пула может сотни раз за день выдаваться разным людям...
Здравствуйте, DrZubr, Вы писали:
DZ>По поводу идентификации пользователей по IP. А ты не думал, что бывает такое, что юзеры ходят в инет через проксю? Например организация из 1000 человек может сидеть за одной проксей, а ты их всех будешь идентифицировать как одного человека. Или тот же диал-ап — там IP-шник из пула может сотни раз за день выдаваться разным людям...
Вроде есть два варианта для этого: сессия и/или кукование
Здравствуйте, bopka_, Вы писали:
_>Здравствуйте, DrZubr, Вы писали:
DZ>>По поводу идентификации пользователей по IP. А ты не думал, что бывает такое, что юзеры ходят в инет через проксю? Например организация из 1000 человек может сидеть за одной проксей, а ты их всех будешь идентифицировать как одного человека. Или тот же диал-ап — там IP-шник из пула может сотни раз за день выдаваться разным людям...
_>Вроде есть два варианта для этого: сессия и/или кукование
А что тогда записывать в куки? У меня нету никакой однозначной идентификации пользователей, голосующих за сайты, т.к. голосование устроено без регистрации (любой прохожий может рейтинг сайту увеличить)...
Здравствуйте, DeMx, Вы писали:
_>>Вроде есть два варианта для этого: сессия и/или кукование DM>А что тогда записывать в куки? У меня нету никакой однозначной идентификации пользователей, голосующих за сайты, т.к. голосование устроено без регистрации (любой прохожий может рейтинг сайту увеличить)...
Нужно создать уникальную переменную сессии — обычно, это случайный длинный набор знаков, и использовать её, как идентификатор.
Здравствуйте, bopka_, Вы писали:
_>Здравствуйте, DeMx, Вы писали:
_>>>Вроде есть два варианта для этого: сессия и/или кукование DM>>А что тогда записывать в куки? У меня нету никакой однозначной идентификации пользователей, голосующих за сайты, т.к. голосование устроено без регистрации (любой прохожий может рейтинг сайту увеличить)...
_>Нужно создать уникальную переменную сессии — обычно, это случайный длинный набор знаков, и использовать её, как идентификатор.
Хм, вот такого мне еще не предлагали. =) А как это сделать?
Здравствуйте, DeMx, Вы писали:
_>>Нужно создать уникальную переменную сессии — обычно, это случайный длинный набор знаков, и использовать её, как идентификатор. DM>Хм, вот такого мне еще не предлагали. =) А как это сделать?
Это, вроде, стандартный способ
Если в PHP, то посмотри здесь
Здравствуйте, bopka_, Вы писали:
_>Нужно создать уникальную переменную сессии — обычно, это случайный длинный набор знаков, и использовать её, как идентификатор.
По-моему ты что-то не то человеку советуешь...
При чем здесь "уникальная переменная сессии"??? Ведь вопрос то стоит про голосование без регистрации.
Здравствуйте, DeMx, Вы писали:
DM>А что тогда записывать в куки? У меня нету никакой однозначной идентификации пользователей, голосующих за сайты, т.к. голосование устроено без регистрации (любой прохожий может рейтинг сайту увеличить)...
Во-первых, если у тебя голосование без регистрации, то отличать пользователей следует по кукам. Но учти что это совсем не 100% способ — парень может и почистить куки, так что он накруток это в общем не спасет...
А в куки писать нужно уникальный id-шник пользователя (можно например брать большой рандом — будет достаточно надежный uid).
Здравствуйте, DrZubr, Вы писали:
DZ>Здравствуйте, bopka_, Вы писали:
_>>Нужно создать уникальную переменную сессии — обычно, это случайный длинный набор знаков, и использовать её, как идентификатор.
DZ>По-моему ты что-то не то человеку советуешь... DZ>При чем здесь "уникальная переменная сессии"??? Ведь вопрос то стоит про голосование без регистрации.
Если нет регистрация — то сессия или кука — единственный способ установить, был он здесь или нет, что бы не голосовал по второму разу
Здравствуйте, bopka_, Вы писали:
_>Если нет регистрация — то сессия или кука — единственный способ установить, был он здесь или нет, что бы не голосовал по второму разу
Ну при чем здесь сессия? Как ты предлагаешь использовать сессию?
Здравствуйте, DrZubr, Вы писали:
DZ>Здравствуйте, bopka_, Вы писали:
_>>Если нет регистрация — то сессия или кука — единственный способ установить, был он здесь или нет, что бы не голосовал по второму разу
DZ>Ну при чем здесь сессия? Как ты предлагаешь использовать сессию?
Ну не обязвтельно сессия — просто какой-то уникальный ключ, показывающий, что пользователь там уже был, что то вроде
При первом входе на страницу пользователь получает этот ключ, и если входит туда ещё раз, производится проверка на наличие этого ключа. Если ключ есть — голосование запрещается.
Здравствуйте, bopka_, Вы писали:
_>Ну не обязвтельно сессия — просто какой-то уникальный ключ, показывающий, что пользователь там уже был, что то вроде _>
ИМХО, довольно странный и ненужный гемор с hidden-полем... Зачем оно?
_>При первом входе на страницу пользователь получает этот ключ,
Что значит получает ключ? Куда он его получает?
_>и если входит туда ещё раз, производится проверка на наличие этого ключа. Если ключ есть — голосование запрещается.
писал как стоит делать (IMHO).
Повторю еще раз.
1. Когда парень жмет "Проголосовать", проверяем есть ли у него на куках наш uid.
а) если есть — смотрим не голосовал ли он раньше за этот сайт и не админ ли он. Если да — посылаем его. Иначе — защитываем результат голосования и помечаем, что он уже проголосовал за этот сайт.
б) если нет — генерим uid, записываем куку, защитываем результаты голосования, помечаем что проголосовал.
2. При генерации страницы с голосованием проверяем uid на куках. Если он есть и парень уже участвовал в этом голосовании или он админ — вырезаем возможность проголосовать. Иначе — отображаем голосование.
писал как стоит делать (IMHO). DZ>Повторю еще раз. DZ>1. Когда парень жмет "Проголосовать", проверяем есть ли у него на куках наш uid. DZ>а) если есть — смотрим не голосовал ли он раньше за этот сайт и не админ ли он. Если да — посылаем его. Иначе — защитываем результат голосования и помечаем, что он уже проголосовал за этот сайт. DZ>б) если нет — генерим uid, записываем куку, защитываем результаты голосования, помечаем что проголосовал. DZ>2. При генерации страницы с голосованием проверяем uid на куках. Если он есть и парень уже участвовал в этом голосовании или он админ — вырезаем возможность проголосовать. Иначе — отображаем голосование.
Ну и..?
Я про то же самое говорю. Только, если пользователь куку отключит, придётся uid передавать по форме через POST
Здравствуйте, bopka_, Вы писали:
_>Ну и..? _>Я про то же самое говорю. Только, если пользователь куку отключит, придётся uid передавать по форме через POST
Я так понимаю, что тебя убедить невозможно.
И смысл передавать uid через POST? Ведь его тогда придется таскать не только в post-формах, но и в get-ссылках. К тому же после того как пользователь закроет наш сайт, мы его уже не идентифицируем в следующий заход на сайт. И к чему тогда эти танцы с бубном только ради того чтобы не дать юзеру проголосовать несколько раз в течении одного сеанса работы с сайтом??
ИМХО, в данной ситуации, когда нужно сделать голосование без регистрации имеет смысл ориентироваться только на куки, а если они отключены, то посылать такого парня.
Здравствуйте, DrZubr, Вы писали:
DZ>Здравствуйте, bopka_, Вы писали:
_>>Ну и..? _>>Я про то же самое говорю. Только, если пользователь куку отключит, придётся uid передавать по форме через POST
DZ>Я так понимаю, что тебя убедить невозможно.
В чём?
DZ>И смысл передавать uid через POST? Ведь его тогда придется таскать не только в post-формах, но и в get-ссылках.
Факт — если нет возможности пользоваться куками, нужно таскать этот uid везде
DZ>ИМХО, в данной ситуации, когда нужно сделать голосование без регистрации имеет смысл ориентироваться только на куки, а если они отключены, то посылать такого парня.
В принципе да, всё остальное имелось в виду "на крайний случай"
Здравствуйте, bopka_, Вы писали:
_>Здравствуйте, DrZubr, Вы писали:
DZ>>Я так понимаю, что тебя убедить невозможно. _>В чём?
В том что в случае DeMx особо нет смысла в сессии (таскание uid через параметр запроса — это фактически та же сессия)
DZ>>И смысл передавать uid через POST? Ведь его тогда придется таскать не только в post-формах, но и в get-ссылках. _>>Факт — если нет возможности пользоваться куками, нужно таскать этот uid везде
Не факт. Смысл??? Зачем устраивать лишний гемор, который всего лишь не даст проголосовать дважды в течении одной сессии?
DZ>>ИМХО, в данной ситуации, когда нужно сделать голосование без регистрации имеет смысл ориентироваться только на куки, а если они отключены, то посылать такого парня. _>В принципе да, всё остальное имелось в виду "на крайний случай"
С такими крайними случаями...
Здравствуйте, DeMx, Вы писали:
DM>Есть каталог сайтов. Самописный, млин. Так вот, все вроде написано и работает. Осталось только сделать проверку на повторное голосование за сайт и голосавание от самого админа. Я просто не много не понимаю сам принцип... DM>Требуется: DM>- запретить голосовать одному посетителю больше одного раза за сайт; DM>- запретить голосовать администратору сайта (тот, кто будет заполнять форму о добавлении сайта в каталог) за свой же ресурс.
DM>Я так понимаю, что все это реализуется записью IP-адреса каждого проголосовавшего в базу. Затем просто нужно будет искать при очередном добавлении голоса совпадения. Плюс еще нужно будет записывать IP'шник админа, чтоб и его потом проверять. Так ли я все это понимаю? Может есть какие-то мелкие ньюансы, облегчающие работу со всем этим? Какие вообще варианты есть? Может эффективней просто в файл все IP'шники записывать?
Все предложенные варианты слабы, если голосующий хоть чуток продвинут.
Предлагаю идентифицировать помимо куки, устанавливаемого при голосовании, (который многие вытрут) по комбинации IP и хидера отсылаемого браузером (только надо внимательно глянуть, что из него брать действительно устойчивого и индивидуального: языковые и MIME приоритеты, плагины и т.д). В таком случае специалист по вытиранию куки сможет проголосовать меньшее количество раз, если же дополнить форму голосования клиентским скриптом записывающим в куки специфическую информацию (разрешение, цветность и т.д.), то можно ещё более повысить вероятность, что не будет отказанно в голосовании двум компьютерам с одного IP и совпадающими хидерами браузеров.