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. 请问怎么修改评论回调js,我小白一枚(非计算机专业的),用的是TE的原生评论系统。

    Reply
  2. 为毛你这里又是正常的呢?

    Reply
    1. @xqiushi

      文章已经基本过时了,主题内集成了解决方法~

      Reply
      1. @Chakhsu Lau

        好吧,那我折腾不了了

        Reply
  3. 这样以来,每次都得评论者填写一次评论不科学呀!我禁止TpCache插件缓存了!

    Reply
    1. @明月登楼学习笔记

      ??? 你可以直接在主题里加上评论回调js,这个问题早就被解决了~

      Reply
      1. @Chakhsu

        请问怎么修改评论回调js,我小白一枚,啥都不懂,用的是TE的原生评论系统。

        Reply
  4. 可乐

    这个主题真的不错

    Reply
    1. @可乐

      谢谢,已经在制作新主题,尽力新年前换掉 :)

      Reply
  5. 我觉得博主还是不用对那一块改动比较好吧,毕竟我觉得不是每一个人都会使用那个缓存插件的,主题还是调用cookie比较方便,不然每次评论一次都要输入一次信息好累。

    Reply
    1. @拾叁

      其实我也想不动,但目前我找不到更适合缓存的插件,问题是我现在用了这个插件,要保证用户的信息的基本安全。

      Reply
  6. 这个问题我也发现过,但没有解决。看了博主的解决过程感觉还是蛮好的。

    Reply
    1. @尹先生

      唉,没办法,其实这样反而安心很多,因为对其他评论用户无骚扰···

      Reply