修改这个是因为上一篇文章有同学评论说会缓存评论人的信息
当然,我没注意到这个是因为我们的Chakhsu同学在老高的技术博客也提到这个问题
而我用的模板也是来自于 Chakhsu 的,所以他在模板里面已经修改过这个问题,直接不读取 cookies 来回填用户信息
我就小小的修改了一下,采用 js 来读取并回填,登录状态还无所谓,没登陆的用户确实造成了小小的不便(当然,对我这种常年只有我一个人访问的博客没什么影响……)
首先分析了一下 typecho 的函数
模板文件comments.php
里获取的函数是
1 2 3
| <?php $this->remember('author'); ?> <?php $this->remember('mail'); ?> <?php $this->remember('url'); ?>
|
跟随函数到了\var\Widget\Archive.php
函数原型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public function remember($cookieName, $return = false) { $cookieName = strtolower($cookieName); if (!in_array($cookieName, array('author', 'mail', 'url'))) { return ''; }
$value = Typecho_Cookie::get('__typecho_remember_' . $cookieName); if ($return) { return $value; } else { echo htmlspecialchars($value); } }
|
继续跟随Typecho_Cookie::get
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public static function setPrefix($url) { self::$_prefix = md5($url); $parsed = parse_url($url);
self::$_path = empty($parsed['path']) ? '/' : Typecho_Common::url(NULL, $parsed['path']); } ******中间省略******
public static function get($key, $default = NULL) { $key = self::$_prefix . $key; $value = isset($_COOKIE[$key]) ? $_COOKIE[$key] : (isset($_POST[$key]) ? $_POST[$key] : $default); return is_array($value) ? $default : $value; }
|
发现原来前缀不是随机的,而是当前 url 的 md5 哈希
然后当然直接读取填写啦
在comments.php
里删除
1 2 3
| <?php $this->remember('author'); ?> <?php $this->remember('mail'); ?> <?php $this->remember('url'); ?>
|
三句
然后在合适的位置添加(当然是在</script>
里面啦)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php if(!$this->user->hasLogin()){ ?> function getCookie(name){ var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(decodeURI(arr[2])); else return null; } function adduser(){ document.getElementById('author').value = getCookie('<?php echo md5($this->request->getUrlPrefix()); ?>__typecho_remember_author'); document.getElementById('mail').value = getCookie('<?php echo md5($this->request->getUrlPrefix()); ?>__typecho_remember_mail'); document.getElementById('url').value = getCookie('<?php echo md5($this->request->getUrlPrefix()); ?>__typecho_remember_url'); } adduser(); <?php } ?>
|
搞定收工
没有用到 jquery,因为模板不需要,我也喜欢轻量级~