11

建议给网页版发帖/回帖按钮添加去重(保证幂等)

 3 years ago
source link: https://bbs.pku.edu.cn/v2/post-read.php?bid=1&threadid=18204797
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

建议给网页版发帖/回帖按钮添加去重(保证幂等)

[复制链接] 分享:

楼主

StupidReader [离线]

不能死读书

3.2中级站友

发帖数:339 原创分:0

<ASCIIArt> 1楼

以前时不时见到有网友“网速不好”,相同的回帖发了好几次。最近自己都差点遇到一次,当时点了按钮提示失败,差点再点一次,幸而想起来其他人重复发三五次的经历,先刷新检查一下发出去没有。

这不,今天又见到了…

https://bbs.pku.edu.cn/v2/post-read.php?bid=414&threadid=18204271&page=5

那么,BBS可否也在网页端实现防重复发帖的功能呢?

现代化Web服务似乎都有机制避免这种重复提交的现象,使得用户发帖的POST请求也实现幂等,发两次三次都等于发一次。一种粗暴的实现方法是提交时对比该用户最近一次发帖的内容(比如Twitter发帖去重就是直接比内容的),但是这样无法避免用户“卡了”之后以为没发出去,顺手修改了两个字之后重发。更复杂的实现方法是每个提交发帖的表单都隐藏一个unique token(有时候直接用CSRF token兼任),服务端基于这个token对所有POST请求去重,这样可以精确区分用户手动发相同内容和用户意外多次点发布按钮。这个方案也有一点技术问题,比如要记录最近5-10分钟内所有成功提交的帖子的token用于对比,可能浪费太多内存了,但是可以用一些近似数据结构来解决。

如果各位站务觉得这个功能值得开发的话,寡人不才,以前写过一点php、略懂数据库/html等等,愿意尽自己一点绵薄之力,帮助开发这个功能。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK