引言
你是否曾遇到过这样糟糕的体验:
你在一个网页表单中,用心填写好所有项目后,点提交按钮时被告知“您提交的内容中有敏感信息,请检查!”,而你急得抓破头皮也找不到所谓的“敏感信息”在哪,几经修改也还是一样,致使根本无法提交内容;
更糟糕的网站甚至提交后转到其他页面才告知你有“敏感信息”,而此时你想重试的话只能重新填写整个表单!
显然,这些网站有些过敏了,但或许有网站主确实就是抱着“宁可错杀一千,绝不姑息一个”的想法来做的,这点在我国可以理解;不过就用户体验方面来说,我觉得用脏话回敬他们一点都不过分,因为他们完全不尊重用户体验,浪费用户的时间,给用户带来恼怒和困扰。
这里我提供一种简单易行的方案,可以兼顾网站安全和用户体验,我称之为“自说自话方案”。
简述
简而言之,这种方案就是让用户自言自语。
在用户提交内容时,如果我们认为内容包含不良信息,就将其设为“仅发布者可见”,这样发布者完全不知道自己的信息被屏蔽,就不会产生上述困扰,而网站也不会因为向公众显示不良信息而受处。
实现原理
实现原理很简单:
首先在用户首次访问网站时,为用户分配一个GUID,并将其存入Cookies中;
当用户发布信息时,将此GUID也存入信息表格的[发布者ID]字段中;此时如果认定信息属于不良信息,则将其标记删除(仅通过一个布尔值标记为删除,而非真的删除);
显示信息列表时,将用户此前分配到的GUID传入,在数据库中检索未标记删除或[发布者ID]与用户GUID相等的信息显示出来即可。
为了解决用户更换电脑后浏览时看不到此前发布的已被屏蔽的信息的情况,应当在用户注册时将此前分配的GUID记录在用户属性中,并在每次用户登录时,将记录下的GUID重新写入Cookies。这样做虽然仍然无法解决用户在换新机后、登录前这一段时间内无法看到此前发布的已被屏蔽的信息的情况,但应该不是很容易被用户发现的,因为作为一个正常用户来说,被屏蔽的信息量应当很少的,再加上换机且未登录状态的发生概率,可能性就很低了,而且就算被发现了他也可能认为是系统临时性故障,再者就算此兄疑心很重,经过反复试验搞明白了咱的把戏,他也没辙是不是?
优点
这样做的好处:
1.有极好的用户体验(或者说“没有什么不好的用户体验”,因为这样几乎不会对任何用户造成困扰)
2.维持高安全性
3.减少相关投诉和冲突
4.防止用户频繁重复尝试,继而减少服务器压力
5.让被屏蔽者误以为自己发布的内容在此网站上没有人感兴趣,继而以后不再尝试发布类似内容
缺点
这种宽松的提交验证方式的优势是对自然人而言的,它的弊端就在于对机器人自动发布的内容也保持同样宽容,但机器人可不会自知没趣而不再发帖,重复频繁发布的垃圾内容虽然不会显示给公众,但也会影响网站性能,所以需要在提交环节中加入验证码、提交频率判定、客户端脚本执行等技术来找出并屏蔽机器人访问。
其次就是在性能方面,无法用常规的缓存功能来缓存信息列表,因为对于不同的人来说列表是不同的。(这个如何解决呢?高手可以谈一下哈。我粗略想了一下,觉得可以在全局中缓存未标记删除的信息列表,然后每次用户访问时在Session中存入此用户GUID对应的信息列表,显示时将两个列表组合起来显示。)
结语
这里抛砖引玉,旨在希望各个程序员开动思维,在达成项目要求的前提下,尽可能地为用户提供更好的体验。
此方法结合我之前发表的《敏感内容自动评审类库及辅助工具》来做审查,效果会更好。
下载
本文的XPS版本:http://www.uushare.com/user/icesee/file/3185317