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

By shiqiren at 2015-08-11 • 0人收藏 • 1621人看过
//获取头像,主要是读取文件的修改时间,加到图片路径后面
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 . '"/>';
}


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

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

2015-08-11   #2

回复#1 @shiqiren :

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

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

2015-08-11   #3

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

location.reload()

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

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

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

2015-08-11   #4

回复#3 @lincanbin :

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

登录后方可回帖

登 录
信息栏

Carbon Forum是一个基于话题的高性能轻型PHP论坛

下载地址:Carbon Forum v5.9.0
QQ群:12607708(QQ我不常上)

donate

手机支付宝扫描上方二维码可向本项目捐款

粤公网安备 44030602003677号
粤ICP备17135490号

Loading...