2

我有一个内容可以被“点赞”的网站。不为此使用任何 api,它是一个自定义的类似按钮,只是增加内容的“喜欢”统计信息。

现在,我在每个页面加载时都有一个视图计数器,还有一个点赞按钮。按下点赞按钮后,该页面生命周期内的任何连续点赞都会被禁用。

我遇到了一个问题,我的喜好超过了我的观点……理论上这不应该发生。从那以后,我实现了一些 java 代码来取消按钮的连接(基本上隐藏元素),并且我还为忽略 java 的机器人添加了一些服务器端代码。

在服务器端按钮按下时,我设置了一个会话变量,如果为该页面实例设置了此会话变量,则退出任何引发的连续事件。

当我快速单击按钮返回时,我已经将其减少到最多两个或 3 个事件。只有在第 2 次/第 3 次运行有足够的时间来识别会话变量之后,才会忽略事件代码。在我的会话 var 技巧之前,您可以快速单击该按钮 10 次,它会在页面最终回发并禁用该按钮之前增加 10 个喜欢。

所以,减少到 2 或 3 也不错,但我一直获得的点赞数多于对某些内容的看法。

  • 我的观点计算得很好,我仔细检查了。
  • 我的喜欢肯定只会在几个不需要的事件触发后捕获第一个禁用/会话 var 触发器/事件......(快速点击)
  • 我怀疑它的搜索引擎可能会跟随链接......?

补充信息:jquery 按钮禁用:

<script type ="text/javascript">
    function pageLoad() {
        $('#<%=vidUpB.ClientID%>').click(function () {
            $(this).css("display","none")
        });
    }
</script>

有任何想法吗?

4

2 回答 2

3

当机器人发现某个 url 的 POST 请求时,他们喜欢向那里发送 GET 请求以四处查看。如果他们喜欢他们看到的内容,则链接可以被缓存,并且您可以不时获得对该 url 的其他 GET 请求。讨厌的机器人不遵循 robots.txt,处理它们的唯一方法是在它们的方式中放置一些不显眼的验证码——比如要求类似的请求是 POST 请求并检查隐藏的输入字段是否保持为空。

<asp:TextBox ID="txtKeepEmpty" runat="server" style="display:none" />
<asp:Button runat="server" OnClick="btnLike_Click" Text="Like" />

protected void btnLike_Click(object sender, EventArgs e) {
  if (IsPostBack && 
    Request.HttpMethod == "POST" && 
    string.IsNullOrEmpty(txtKeepEmpty.Text)) {
    // update
  }
}

会话存储也是基于会话密钥 - 这是一个 cookie。每次用户删除会话 cookie 时,他都会开始一个新会话。当他永久禁用 cookie(一些用户正在这样做)时,它将为他触发的每个请求创建新会话。

于 2014-06-12T13:30:28.537 回答
2

要尝试的事情:

  1. 默认情况下禁用 HTML 按钮。如果他们只是抓取 HTML,这将防止任何机器人按下它。这样,如果他们不解释 Javascript,他们就无法按下按钮。
  2. 在您的 Javascript 页面加载处理中,启用该按钮。
  3. 按下按钮时,让 Javascript 立即(本地)禁用它。这应该可以防止或至少减少连续多次单击它的可能性。
  4. 继续使用您的服务器代码过滤掉通过其他方式获得的无关按钮按下。
于 2014-06-12T13:16:39.460 回答