改typecho存评论用户信息为javascript模式
有同学评论说会缓存评论人的信息
当然,我没注意到这个是因为我们的Chakhsu同学在老高的技术博客也提到这个问题
而我用的模板也是来自于Chakhsu的,所以他在模板里面已经修改过这个问题,直接不读取cookies来回填用户信息
我就小小的修改了一下,采用js来读取并回填,登录状态还无所谓,没登陆的用户确实造成了小小的不便(当然,对我这种常年只有我一个人访问的博客没什么影响……)
首先分析了一下typecho的函数
模板文件comments.php里获取的函数是
<?php $this->remember('author'); ?>
<?php $this->remember('mail'); ?>
<?php $this->remember('url'); ?>
跟随函数到了\var\Widget\Archive.php
函数原型
/**
* 输出cookie记忆别名
*
* @access public
* @param string $cookieName 已经记忆的cookie名称
* @param boolean $return 是否返回
* @return string
*/
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
public static function setPrefix($url)
{
self::$_prefix = md5($url);
$parsed = parse_url($url);
/** 在路径后面强制加上斜杠 */
self::$_path = empty($parsed['path']) ? '/' : Typecho_Common::url(NULL, $parsed['path']);
}
******中间省略******
/**
* 获取指定的COOKIE值
*
* @access public
* @param string $key 指定的参数
* @param string $default 默认的参数
* @return mixed
*/
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里删除
<?php $this->remember('author'); ?>
<?php $this->remember('mail'); ?>
<?php $this->remember('url'); ?>
三句
然后在合适的位置添加(当然是在里面啦)
<?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,因为模板不需要,我也喜欢轻量级~
版权声明:本文为李维亮博主的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.liweiliang.com/785.html
- 上一篇: Typecho免插件使用七牛云存储
- 下一篇: typecho伪静态.htaccess规则
评论已关闭