各ユーザーが複数の写真に投票できるようにする Web アプリケーションを ASP.NET MVC で作成しようとしていますが、同じ写真に複数回投票することはできません。ユーザーは認証されません。データベースまたは Cookie に何を保存する必要がありますか?
4 に答える
列PictureId
、UserId
、を含むデータベース テーブルに投票を保存し、複合一意制約を列にScore
追加します。これにより、ユーザーと画像ごとに 1 つの投票のみが確実に行われます。PictureId
UserId
匿名ユーザーには 2 つのオプションがありますが、どちらもあまり良いものではありません。
1) Cookie に保存されたユーザー ID でユーザーを追跡します。Cookie が存続する限り。ユーザーは 2 回投票できません。ただし、Cookie を削除または変更することはできます。Cookie がオフになっている可能性があります。同時に 2 つの異なるブラウザーを開くことができます。「チート」用のスクリプト (curl http://site/vote?score=5&pic_id=1 ) は、とにかく Cookie を保存しません。基本的に、必要以上に投票することになります。
1.5 *
2) IP アドレスでユーザーを追跡します。これは本質的に反対です。ユーザーは、Cookie の削除、ブラウザの切り替えなどに関係なく、2 回投票することはできません。ただし、同じ世帯の複数人 (DSL ルーターを使用) は、1 回の組み合わせでしか投票できません。多くの企業も同様に、多くのユーザーを 1 つの IP アドレスの背後に隠します。一部の ISP も同様だと思います (AOL?)。合法的に記録されるべきよりもはるかに少ない「投票」で終わることになります。
問題は、賛成票と反対票のどちらが欲しいかということです。不正行為の可能性が高いと思われる場合は、#2 を選択します。しかし、不正行為の可能性がある場合、それはインセンティブがあることを意味します。また、自分の投票が集計されていないことに気付いた場合 (気付いていない可能性もあります)、不満を抱くでしょう。
その後、各投票を行として保存するか、投票を 1 つの行に結合するか (更新画像セット num_votes = num_votes + 1、total_score = total_score + [提出されたスコア]) はあなた次第です。
- 1.5 3 番目のオプションは、投票と電子メール アドレスを記録し、確認リンクを含む電子メールを送信し、それをクリックして投票を記録するように依頼することです。偽の電子メール アドレスを使用してカンニングを行うことはできますが、Cookie を削除するほどではありません。
Daniel Brückner が示唆するように、一意の認証されたユーザーのデータベース レコードが前進する必要があります。Cookie は信頼性が低く、たとえば、Cookie を削除したり、ユーザーが別のブラウザーを使用したりする可能性があります。
ユーザーが認証されている場合は、画像投票でユーザーIDを保存できます。
ユーザーが匿名の場合、システムは画像投票でIPアドレスを保存する傾向があります。完璧ではなく、100%証明されているわけではありませんが、ほとんどの状況で機能します。