Digg 類投票問題 (實做細節)

問題是做像 類的投票功能 (那個 "Digg" 的點擊),想要做到這幾點:

  • 在有 Javascript 的情況下使用 (XMLHttpRequest) 更新,也就是使用
  • 在沒有 Javascript 的情況下可以 Graceful Degradation,也就是說用 pure HTML 的方式送出 (像是 form 或是 a link)。
  • 語意正確。

一開始的想法是這樣做:

  • 用 a link 設定 /vote.php?id=123 作為 Graceful Degradation,vote.php 更新完資料庫後再重導回原頁面。
  • 在這個 a link 上加上 onclick 物件,以 的方式送出並更新,這邊定為 /vote.php?id=123&ajax=1

不過這樣的問題在於可以使用 <img src=...> 直接指定投票 url 而票數爆衝 ( 發生過),不知道後來是怎麼解決 Graceful Degradation 問題的...

我想到的方法是利用 類的方法加上簽名:把預設的 a link 加上 &sign=xxx,其中 xxx 是 sha1("$secretkey-$username-$id") (或是類似的方式產生),而 的部份改成用 POST 送。

有建議嗎?

One thought on “Digg 類投票問題 (實做細節)”

  1. 我的做法是全都用 POST 的,再抽 HTTP Header (x-requested-with) 去判斷是否來自 AJAX。

    背後再加一層 HTTP referer checking 防詐,但這有得有失,因為可能會擋了不知自己block了referer及JavaScript的用家。(例如裝了甚麼 Internet Security 之類的用家)

Leave a Reply

Your email address will not be published. Required fields are marked *