基于 !270:修复 关于Formhash的一系列问题 ,先把其中的一个问题拿出来进行修复。

由于每个游客的formhash不一样,所以启用了页面缓存后,在生成的页面缓存文件中只保存了第一个用户的formhash,这样会导致两个问题:

  1. 其它游客无法提交需要游客formhash的表单
  2. 第一个游客的formhash泄露。理论上存在伪造请求的可能。

这个补丁修复了此问题,方案是在内存中,ob_flush之前,将页面中的formhash替换为当前游客的formhash。达到的效果是,在开启了页面缓存后,在首页和帖子页,游客进行搜索,或点击热门搜索,都不再报 "非法字符" 错 (相关问题:#IQSOT:论坛首页formhash缓存导致游客搜索功能报错)。

另外,修复了帖子页面缓存系数计算的问题,原来引用的几个字段都不存在,现改为基于帖子的创建时间、最后回复时间、是否加精、总页数这几个参数进行缓存系数计算。

在新的缓存计算规则下,缓存生效的范围和原来可能不同,请大家更新后注意观察自己的缓存目录 data/threadcache