今天偶然发现,在博客园同时打开多篇文章,如果短时间内分别在不同文章里提交相同内容的评论,就会提示"该评论已发表过!"。一开始感觉这应该是个bug,毕竟在同一篇文章里,并不存在相同的评论。后来经过反复测试,通过Fiddler可以发现,这个提示信息是在后台http://www.cnblogs.com/ws/CommentService.asmx里的 AddComment返回的:

1
2
//AddComment方法返回的信息
{"d":{"__type":"BlogServer.Web.WS.ReturnValue","IsSuccess":false,"CommentID":0,"ReturnData":"该评论已发表过!"}}

从页面里的PostNewComment()方法中这段代码的注释中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$.ajax({
    url: '/ws/CommentService.asmx/AddComment',
    data: $.toJSON(comment),
    type: "post",
    dataType: "json",
    contentType: "application/json; charset=utf8",
    success: function(data) {
        if (data.d) {
            if(data.d["IsSuccess"]){
                var dt = (new Date()).getTime()-startDate;
                ShowCommentMsg("感谢您的回复:)" + " 提交耗时"+dt+"毫秒");                       
                //RereshComments2(comment.parentId); 
                $("#tbCommentBody").val('');
                $("#divCommentShow").html($("#divCommentShow").html()+data.d["ReturnData"]);                 
                //$("#divCommentShow").html(data.d["ReturnData"]+content.replace(/\n/g,"<br/>")+"<br/><br/>");                        
                CommentNotify(data.d["CommentID"]);                       
                }else{
                //就是在这里给出的提示信息
                ShowCommentMsg(data.d["ReturnData"]);
                $("#span_comment_posted").html('');                       
           }

可以发现,前面返回信息中的“IsSuccess”和“ReturnData”属性决定了给出了这个提示。如此说来这似乎是博客园在后台里有意加入的一个限制,大概的逻辑好像是:不管是否同一篇文章,在一段时间内不能提交相同内容的评论。换句话说,即使相同内容的评论,在同一篇文章里,只要间隔时间足够长,还是可以反复提交的。在相同文章里,有下面这个限制:

1
2
3
4
if($("#span_comment_posted").html()!='' && $("#span_comment_posted").html()==content){
     alert("该评论已发表过!");
    return;

这段脚本决定了,对于同一篇文章,不能反复提交相同评论,但是这种逻辑不能阻止交替提交相同的评论。从为了防止恶意刷屏的角度来说,这个限制应该还算是比较合理的,只是相同页面已经有了alert("该评论已发表过!");限制,如果跨页面提交相同评论的时候,这个提示信息如果能改成"XXX秒内,不允许提交相同评论!"更直观一点,不容易产生歧义。

综合前面所有的分析,最后对博客园的评论校验规则的实现做个总结:
首先,会在客户端通过比较span_comment_posted缓存的内容,判断是否连续提交了相同评论,并直接在客户端通过alert给出提示信息,因为在刷新页面或切换到其他页面以后span_comment_posted内容就没意义了,所以这种校验只在相同页面内且没有人为刷新过时有效。
其次,就是在后台的CommentService里,限制在一段时间内(好像是60秒)不能连续提交相同的内容。这种方式比较可靠,不管是否刷新页面,是否跨页面,都不会影响校验规则。
最后,好像在CommentService里还有一个连续提交多少次评论以后,就会提示"提交评论太频繁!"的校验,实现方式跟前者应该一样。

总体感觉博客园的校验规则还是比较完善的,除了上面说过的提示不太准确,暂时没有什么好的意见,各位看客有什么更好的意见,不妨说出来大家一起讨论。


本文转自Justin博客园博客,原文链接:http://www.cnblogs.com/justinw/archive/2009/12/20/1628021.html,如需转载请自行联系原作者

[Debugging]分析博客园提交评论的校验规则相关推荐

  1. python博客园_用Python向博客园发布新文章

    最近在开发一个博客系统,经常把写的东西放在自己网站的博客上(之前写在Onenote),然后我在博客园也申请了一个博客,就有了同样一篇文章,我需要复制粘贴排版分别提交两次的情况.于是我就想能不能在我的网 ...

  2. 博客园网站程序的一个小问题

    我使用 Firefox 2.0 浏览器在博客园发表评论时,如果"使用高级评论",则在提交评论时总是失败.而使用 IE 6.0/7.0 浏览器则完全正常.因为我在单位上外网时,是使用 ...

  3. [Thinking]从赢在中国,思考博客园的商业化

    发布日期:2007.7.11 作者:Anytao ©2007 Anytao.com ,原创作品,转贴请注明作者和出处. 本文将介绍以下内容: 赢在中国 创业做人 博客园的商业化 最近两天,博客园的商业 ...

  4. python自动评论_python实现博客网站自动评论器

    基本需求 登录博客园 调用评论接口 返回请求结果 确定流程之后,基本就是找突破口的环节了 实际的去评论一下,然后不管你用什么抓包工具都可以,只要抓取到你想要的数据,即可 评论API如下 Request ...

  5. 详谈如何定制自己的博客园皮肤

    前言 最近,有很多博客园的朋友给我留言或私信,询问我的博客背景是如何做的. 不是我敝帚自珍,而是由于内容较多,一一回复实在是太费劲.没有及时答复的朋友,请见谅. 我在这里做一次集中式分享,如果有喜欢的 ...

  6. 详谈如何定制自己的博客园皮肤【转】

    转自:http://www.cnblogs.com/jingmoxukong/p/7826982.html 目录 前言 Quickstart 定制博客园 CSS 的原理 页面定制CSS代码 博客侧边栏 ...

  7. python爬虫:两种方法模拟登录博客园

    第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以 ...

  8. JAVA爬虫实践(实践二:博客园)

    分析博客园网站的请求可以发现,博客园的分页请求为POST方式,和知乎的滚动加载类似. 不同的是请求响应返回的是HTML而不是JSON. 这样可以套用上一篇爬知乎的代码,需要修改的部分就是POST方法传 ...

  9. 定制和我一样的博客园主题

    有园友问我的博客园的主题怎么弄的,我答应了要发一篇博文分享一下我的博客主题配置.其实是很简单的,相信懂 CSS 的人都能自己搞,但如果你懒得花时间,正好可以直接复制我写好的配置代码. PS:按照博客园 ...

最新文章

  1. 内科学与计算机专业的相关性,急性心肌梗死患者QT间期变异性及心率变异性与室性心律失常的相关性分析-内科学专业论文.docx...
  2. Linux下安装Tomcat
  3. 简明python教程txt-Python:将 list 写入一个 txt 文件四种方法
  4. 【VS Code】更改默认的单击打开文档模式
  5. 【Linux】31. ffmpeg常用命令
  6. C语言:L1-034 点赞 (20分)(解题报告)
  7. 深港澳大湾区(深圳).NET技术交流会圆满成功
  8. c 怎么连接mysql博客_C连接MySql数据库
  9. Qt5:渐变效果的实现
  10. opencore0.6.3_Ubuntu 18.04 源码编译安装 PHP 7.3
  11. 详解S60 WebKit 21772编译教程
  12. mysql某建表语句
  13. IDL| 实现两个数相加,并且询问是否循环
  14. SReng日志扫描动画教程
  15. Proxy(代理)服务器
  16. python 读excel中的sheet_python读取excel文件中所有sheet表格
  17. RMAN下CROSSCHECK命令详解
  18. 港科百创| 香港科大-越秀集团百万奖金国际创业大赛·2021年度总决赛系列活动全回顾...
  19. 微信小程序生成详情页面二维码
  20. 找到右下角弹广告的真凶

热门文章

  1. vue控制多行文字展开收起
  2. Normalize.css :一种用于重置默认的CSS样式的样式工具
  3. 计算机专业 操作系统,计算机操作系统
  4. 模拟手指触摸 Android,TouchLib
  5. js移除字符串的中文/空格
  6. 如何设计大型游戏服务器架构?
  7. 《Android 应用案例开发大全(第二版)》——6.1节Android系统的信使:Intent
  8. mysql数据优化--数据库结构的优化
  9. Oracle中去重复记录 不用distinct
  10. pl/sql developer导入导出