TpCache插件与自带评论的小Bug
in Tutorial with 17 comments
TpCache插件与自带评论的小Bug
in Tutorial with 17 comments

事情是这样的。使用了老高的缓存插件之后,每位新的评论者都会把自己的用户名·邮箱·地址的评论表单信息跟随网站,下一个访问者会依然看到这位新的评论者的用户名·邮箱·地址的评论表单信息。

大概的Bug逻辑

  1. 首先激活TpCache插件,选择Memcached缓存(需要服务器支持),消除所有数据
  2. 退出登录
  3. 随便给一篇文章添加评论
  4. 文章添加新的评论触发缓存更新
  5. 主题里 comments.php 中评论表单中的带有这条 <?php $this->remember(''); ?> 的代码,触发记住评论者的评论表单信息
  6. 缓存更新将评论表单信息也缓存进去
  7. 然后新的用户打开该含有评论表单信息的文章,告诉给浏览器这个cookie是全站适用的
  8. 然后浏览器cookie了评论表单信息,全站所有文章都是这位评论者的评论表单信息

这里感谢 Tokin(www.idevs.cn) 的bug反馈。

摸清Bug逻辑之后,就马上谷歌找解决方法。可惜没有,向老高提交bug反馈估计也要等很久。

于是自己从两个角度解决这个问题:

最后最后最后,修改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不再出现了···

Responses
  1. Thanks for finally writing about >TpCache插件与自带评论的小Bug - LiNPX <Loved it!

    Reply
  2. 这样应该是不会记住信息了,评论者要每次输入一遍吧,试试

    Reply
    1. @Tokin

      暂时,没有很好的办法,老高应该知道这个bug所以直接用第三方评论。暂时还知道一个方法是评论异地或许可以解决。先隔着日后在补坑。

      Reply
      1. @Chakhsu Lau

        你这里已经被垃圾评论攻陷

        Reply