5

我想要一些伪代码或白板建议,以允许在我的网站上进行未经身份验证的投票。我已经查看了有关该主题的相关线程,但我认为我的场景不同,足以保证它自己的线程。

我想支持3 个核心场景。

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

2) 未经身份验证的用户“Sally”访问我的网站并投票。由于她未经身份验证,我会将她的投票保存在名为“匿名用户来自我的站点”的用户帐户下。

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

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

如何使用 cookie 实现场景 2 和 3?我是否将投票的所有项目 ID 散列在一起?我有哪些选择?

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

最后:我对使用 EverCookie 之类的东西不感兴趣。对于我的需要,这完全是矫枉过正。

4

2 回答 2

1

做一些类似于 SO 所做的事情。当用户访问您的站点时,给他们一个唯一的 ID 并将该 ID 存储在持久性 cookie 中。如果有人完全注册,那么您可以将生成的 ID 与帐户名称相关联。那么用户如何访问您的站点并不重要,因为浏览器会自动为您提供正确的 cookie。

我会避免序列化 cookie 中的数据,因为随着时间的推移数据量可能会变得相当大,而且您可能无论如何都想跟踪服务器端的投票(这样您就可以跟踪使用/滥用情况)。

于 2011-03-14T02:47:49.840 回答
1

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

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

于 2011-03-14T02:47:51.393 回答