事情是这样的。使用了老高的缓存插件之后,每位新的评论者都会把自己的用户名·邮箱·地址的评论表单信息跟随网站,下一个访问者会依然看到这位新的评论者的用户名·邮箱·地址的评论表单信息。
大概的Bug逻辑
- 首先激活TpCache插件,选择Memcached缓存(需要服务器支持),消除所有数据
- 退出登录
- 随便给一篇文章添加评论
- 文章添加新的评论触发缓存更新
- 主题里
comments.php
中评论表单中的带有这条<?php $this->remember(''); ?>
的代码,触发记住评论者的评论表单信息 - 缓存更新将评论表单信息也缓存进去
- 然后新的用户打开该含有评论表单信息的文章,告诉给浏览器这个cookie是全站适用的
- 然后浏览器cookie了评论表单信息,全站所有文章都是这位评论者的评论表单信息
这里感谢 Tokin(www.idevs.cn) 的bug反馈。
摸清Bug逻辑之后,就马上谷歌找解决方法。可惜没有,向老高提交bug反馈估计也要等很久。
于是自己从两个角度解决这个问题:
- 修改TpCache插件
- 修改主题里的comments.php
最后最后最后,修改TpCache插件最终无功而返···
但但但修改comments.php成功解决了这个问题···
解决Bug
打开主题里的comments.php
找到
<input type="text" name="author" id="author" value="<?php $this->remember('author'); ?>" placeholder="称呼" required />
<input type="text" name="mail" id="mail" value="<?php $this->remember('mail'); ?>" placeholder="邮件" <?php if ($this->options->commentsRequireMail): ?> required<?php endif; ?> />
<input type="text" name="url" id="url" value="<?php $this->remember('url'); ?>" placeholder="<?php _e('http://'); ?>" <?php if ($this->options->commentsRequireURL): ?> required<?php endif; ?> />
将
<?php $this->remember('author'); ?>
<?php $this->remember('mail'); ?>
<?php $this->remember('url'); ?>
分别去掉
最后结果是:
<input type="text" name="author" id="author" value="" placeholder="称呼" required />
<input type="text" name="mail" id="mail" value="" placeholder="邮件" <?php if ($this->options->commentsRequireMail): ?> required<?php endif; ?> />
<input type="text" name="url" id="url" value="" placeholder="<?php _e('http://'); ?>" <?php if ($this->options->commentsRequireURL): ?> required<?php endif; ?> />
大概就这样子,Bug不再出现了···
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
Thanks for finally writing about >TpCache插件与自带评论的小Bug - LiNPX <Loved it!
这样应该是不会记住信息了,评论者要每次输入一遍吧,试试
暂时,没有很好的办法,老高应该知道这个bug所以直接用第三方评论。暂时还知道一个方法是评论异地或许可以解决。先隔着日后在补坑。
你这里已经被垃圾评论攻陷