允许在网站上进行匿名/未经身份验证的投票的编程策略

时间:2011-03-14 02:35:25

标签: authentication cookies anonymous voting vote

我想在我的网站上为允许未经身份验证的投票提供一些伪代码或白板建议。我已经查看了这个主题的相关主题,但我认为我的方案不同,足以保证自己的主题。

我想支持 3个核心方案

1)经过身份验证的用户“Joe Blow”登录到我的网站并投票。由于他经过身份验证,他只能投票一次。对于他所做的每一次投票,我将他的UserId存储在DB

2)未经身份验证的用户“Sally”访问我的网站并投票。由于她未经身份验证,我将在一个名为“Anonymous-Users-From-My-Site”的用户帐户下保存她的投票。

3)未经身份验证的用户“Zoltan”使用我构建的小部件来从托管我的小部件的其他合作伙伴网站访问我的网站。他也可以从该网站投票。我将在名为“Anonymous-Users-From-A-Partner-Site”的合作伙伴用户帐户下保存他的投票。

这里的转折是我需要支持“Sally”和“Zoltan”对无限数量的事情进行投票的能力。也许莎莉想在一天内投票500件事。也许Zoltan想在合作伙伴网站上投票200件事。也许Sally不会再访问该网站一个月,然后再回来投票给更多的东西。

如何实现方案2& 3用饼干?我是否一起散列所有项目ID的投票?我有什么选择?

FWIW:我计划在统计选票时做出严格的区分。我会明确表示,匿名投票就是这样 - 匿名。在查看结果时,人们会理解使用一定程度的怀疑态度。但我仍然认为允许未经身份验证的用户投票是有价值的,即使他们可以通过使用多个浏览器来游戏系统或在每次投票后删除他们的cookie。如果在我的网站上投票的用户必须至少做到这一点,那么我会感到满意。

最后:我对使用像EverCookie这样的东西感兴趣。根据我的需要,这是完全矫枉过正的。

2 个答案:

答案 0 :(得分:1)

做类似于SO的事情。当用户访问您的站点时,为他们提供唯一的ID并将该ID存储在持久性cookie中。如果某人完全注册,则可以将生成的ID与帐户名相关联。然后,用户访问您网站的方式并不重要,因为浏览器会自动为您提供正确的Cookie。

我会避免在cookie中序列化数据,因为随着时间的推移,数据量会变得相当大,你可能想要跟踪投票服务器端(所以你可以跟踪使用/滥用)。

答案 1 :(得分:1)

我个人不会将任何未经身份验证的条目与单个用户混为一谈......相反,我会有一张未经身份验证的回复表。一个人第一次投票 - 您插入该表,并将自动键(ID)存储在他的cookie中。如果他删除他的饼干......谁在乎。但这应该可以解决您的所有需求。

这样你就不会试图通过解析逗号分隔的“投票”来“伪造”逻辑......而是你只是假装他们是普通用户并且点击你的数据库以获得投票。