更改头像后不刷新问题,有解决建议代码:

更改头像后不刷新问题,有解决建议代码:

By shiqiren at 2015-08-11
0人收藏 • 1618人看过

//获取头像,主要是读取文件的修改时间,加到图片路径后面
function GetAvatar($UserID, $UserName, $Size = 'middle')
{
    global $Config;
    $filename='/upload/avatar/' . $Size . '/' . md5($UserID) . '.png';
    $editTime=filemtime($_SERVER['DOCUMENT_ROOT'].$filename);
    $filename.='?t='.$editTime;
    return '<img src="' . $Config['StaticDomainName'] . $filename.'" alt="' . $UserName . '"/>';
}


BUG
4 个回复 | 最后更新于 2015-08-11
shiqiren
2015-08-11
#1

上面是我的代码,头像文件我加了MD5加密,还有针对静态资源,比如css、图片等,我用了独立的域名,保存在StaticDomainName

lincanbin
2015-08-11
#2

回复#1 @shiqiren :

这样写,每次访问帖子列表,都会有几十次I/O操作,I/O压力会有些大吧,大并发量下势必导致页面请求失败。

还不如把Web Server里静态资源HTTP Header里的Expired关掉,然后让图片每次都返回304。

lincanbin
2015-08-11
#3

实际上,我觉得应该让用户在上传后,如果判断上传成功,前端用iframe载入三个尺寸的avatar,并对获取三个iframe的对象,对其执行:

location.reload()

强制刷新客户端缓存,这样用户就可以看到自己的头像更新了,至于其他用户,就等Expired再看新头像了。

这样对于节约服务器资源非常有效。

或者就跟我上面那样说的,直接关掉HTTP Header里的Expired。

shiqiren
2015-08-11
#4

回复#3 @lincanbin :

你提醒了我,只需要对当前用户自己的头像加时间戳即可,并根据一些机制自动更新自己的头像


登 录


现在注册

QQ  登 录    Weibo  登 录    GitHub  登 录