日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Debugging]分析博客园提交评论的校验规则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天偶然發(fā)現(xiàn),在博客園同時打開多篇文章,如果短時間內(nèi)分別在不同文章里提交相同內(nèi)容的評論,就會提示"該評論已發(fā)表過!"。一開始感覺這應(yīng)該是個bug,畢竟在同一篇文章里,并不存在相同的評論。后來經(jīng)過反復(fù)測試,通過Fiddler可以發(fā)現(xiàn),這個提示信息是在后臺http://www.cnblogs.com/ws/CommentService.asmx里的?AddComment返回的:

1 2 //AddComment方法返回的信息 {"d":{"__type":"BlogServer.Web.WS.ReturnValue","IsSuccess":false,"CommentID":0,"ReturnData":"該評論已發(fā)表過!"}}

從頁面里的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("感謝您的回復(fù):)"?+ " 提交耗時"+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('');??????????????????????? ???????????}

可以發(fā)現(xiàn),前面返回信息中的“IsSuccess”和“ReturnData”屬性決定了給出了這個提示。如此說來這似乎是博客園在后臺里有意加入的一個限制,大概的邏輯好像是:不管是否同一篇文章,在一段時間內(nèi)不能提交相同內(nèi)容的評論。換句話說,即使相同內(nèi)容的評論,在同一篇文章里,只要間隔時間足夠長,還是可以反復(fù)提交的。在相同文章里,有下面這個限制:

1 2 3 4 if($("#span_comment_posted").html()!=''?&& $("#span_comment_posted").html()==content){ ?????alert("該評論已發(fā)表過!"); ????return; }?

這段腳本決定了,對于同一篇文章,不能反復(fù)提交相同評論,但是這種邏輯不能阻止交替提交相同的評論。從為了防止惡意刷屏的角度來說,這個限制應(yīng)該還算是比較合理的,只是相同頁面已經(jīng)有了alert("該評論已發(fā)表過!");限制,如果跨頁面提交相同評論的時候,這個提示信息如果能改成"XXX秒內(nèi),不允許提交相同評論!"更直觀一點(diǎn),不容易產(chǎn)生歧義。

綜合前面所有的分析,最后對博客園的評論校驗(yàn)規(guī)則的實(shí)現(xiàn)做個總結(jié):
首先,會在客戶端通過比較span_comment_posted緩存的內(nèi)容,判斷是否連續(xù)提交了相同評論,并直接在客戶端通過alert給出提示信息,因?yàn)樵谒⑿马撁婊蚯袚Q到其他頁面以后span_comment_posted內(nèi)容就沒意義了,所以這種校驗(yàn)只在相同頁面內(nèi)且沒有人為刷新過時有效。
其次,就是在后臺的CommentService里,限制在一段時間內(nèi)(好像是60秒)不能連續(xù)提交相同的內(nèi)容。這種方式比較可靠,不管是否刷新頁面,是否跨頁面,都不會影響校驗(yàn)規(guī)則。
最后,好像在CommentService里還有一個連續(xù)提交多少次評論以后,就會提示"提交評論太頻繁!"的校驗(yàn),實(shí)現(xiàn)方式跟前者應(yīng)該一樣。

總體感覺博客園的校驗(yàn)規(guī)則還是比較完善的,除了上面說過的提示不太準(zhǔn)確,暫時沒有什么好的意見,各位看客有什么更好的意見,不妨說出來大家一起討論。


本文轉(zhuǎn)自Justin博客園博客,原文鏈接:http://www.cnblogs.com/justinw/archive/2009/12/20/1628021.html,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的[Debugging]分析博客园提交评论的校验规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。