我有一张存储帖子的表格。每个帖子都有id,标题,内容和分数。目前,你可以喜欢一个帖子,如果你不喜欢它,它的分数会增加和减少。
现在我不明白的事情:如何避免用户多次投票?当然,他们可以再次刷新和投票。我已经阅读了一些存储cookie等的文章,但你不能只是禁用cookie或清除它们并再次投票吗?
我原本以为你必须存储已经投票的人,或者更确切地说是投票人的身份证。但是,我似乎无法想象我会怎么做呢?我会将选民的身份证存储在他们投票的帖子中,还是其他什么?
答案 0 :(得分:0)
您需要额外的表格posts_vote
或其他内容。将字段user_id和post_id放入其中。如果用户对帖子进行投票,则在此表中插入两个ID。如果用户投票,请找到该记录并将其删除。
答案 1 :(得分:0)
您可以将投票记录存储在单独的表格中。
投票历史(备选方案1)
投票历史(备选方案2)
因此,当您拥有该特定记录时,您可以检查用户之前是否已投票支持该帖子,并决定增加/减少实际帖子表中的点数。
将来投票历史记录表会增长并导致性能问题,您可以使用redis / memcached / etc同步历史记录。并使用这些存储技术更快地完成检查。
同样使用cookie可以帮助您在不点击服务器的情况下禁用投票,并减少对Web服务器的请求数量。 您可以将已投票的帖子ID存储在Cookie中并使用javascript进行检查,如果用户已经投票,请不要执行此操作。
因此,您可以使用两个图层来检查用户是否已投票。
如果第一个失败(用户可以通过更改浏览器或清除cookie来绕过此选项),它会回退到第二个,并且您不允许在服务器端进行投票。
答案 2 :(得分:0)
就像一个例子:
假设您有表 public void Export(string filename, string name, string value, DataGridView dg, int iRows)
{
oWord = null;
object missing = System.Reflection.Missing.Value;
object lineNo = missing;
// Get word instance.
ExportData.GetWordInstance(ref oWord);
if (oWord != null)
{
try
{
int iPos = 1;
oDocs = oWord.Documents;
// Open document.
object fileName = DirectoryFiles.OpenFile(filename);
object readOnly = false;
object isVisible = true;
object oMissing = Type.Missing;
oDoc = oDocs.Open(ref fileName, ref oMissing, false, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing);
oBookmarks = oDoc.Bookmarks;
if (name == "bookmarkPositions")
{
int rows = dg.Rows.Count * 3;
object oEndOfDoc = "bookmarkPositions");
Word.Table oTable;
Word.Range wrdRng = oDoc.Bookmarks.Item(ref oEndOfDoc).Range;
oTable = oDoc.Tables.Add(wrdRng, rows + 1, 5, ref oMissing, ref oMissing);
// ....
和posts
。然后你可以有votes
作为查找表。
目视: