个人博客 > 学无止境 > PHP > phpcms后台上传图片提示会话过期解决办法

phpcms后台上传图片提示会话过期解决办法

今天在使用phpcms后台时发现用自带的flash上传图片会提示会话过期。以前是没发生过这种情况。一开始以为是动了上传的代码导致的,结果安装一个全新的PHPcms依然存在该情况,看来就不是这的问题了。话不多说,找原因。

  1. 第一步当然是登录后台找上传的代码,我们可以在后台看到上传图片是调用的这个地址:index.php?m=attachment&c=attachments&a=swfupload&...

  2. 第二步找到对应的方法,打开\phpcms\modules\attachment\attachments.php中的swfupload方法。

  3. 上传附件后提示会话过期,请重新登录

image.png

4.用浏览器查看请求地址,找出原因

这是调用上传图片的请求地址

image.png

这是上传成功后的地址

image.png

大家可以注意下这个位置,phpsessid发生了改变。改变后就提示了会话过期,而且cookie值并没有发生变化。而且上传附件上边一条有一个报错,那么大致的原因也就找到了。博主再次用ie浏览器(火狐浏览器也已经不支持flash上传,点击上传按钮没反应),至于为什么使用ie呢,博主这就只有谷歌浏览器和ie,所以用ie测试。

......

经过多次测试后发下ie浏览器并未产生这种情况,那么原因算是找到了,谷歌浏览器调用flash上传会请求http://www.xxx.com/statics/js/swfupload/这个地址。而PHP的sessionid是同一页面会不发生改变,而phpcms编辑内容是用的新窗口打开网页(或许是这个原因导致的),导致phpsessid改变。

打开\phpcms\libs\classes\session_mysql.class.php文件可以看到phpcms使用的是把sessionid存储到数据库中。

image.png

image.png

问题找到了,那么解决问题就变得相对简单了。

解决办法一:修改下phpcms的后台验证(改动比较少,但是依然使用flash上传),而且会修改phpcms的安全性(虽然漏洞已经很多了)。

后台登录增加角色id的cookie,文件位置:\phpcms\modules\admin\index.php大约100行增加

if(!$r['lang']) $r['lang'] = 'zh-cn';
			param::set_cookie('admin_username',$username,$cookie_time);
			param::set_cookie('siteid', $default_siteid,$cookie_time);
			param::set_cookie('userid', $r['userid'],$cookie_time);
			param::set_cookie('roleid', $r['roleid'],$cookie_time);//此行为新增
			param::set_cookie('admin_email', $r['email'],$cookie_time);
			param::set_cookie('sys_lang', $r['lang'],$cookie_time);

修改后台验证,文件位置:\phpcms\modules\admin\classes\admin.class.php搜索check_admin方法替换

/**
	 * 判断用户是否已经登陆
	 */
	final public function check_admin() {
		if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'public_card'))) {
			return true;
		} else {
			$userid = param::get_cookie('userid');
            $_SESSION['userid'] = $userid;
            $_SESSION['lock_screen'] = 0;
            $_SESSION['roleid'] = param::get_cookie('roleid');
			if(!isset($_SESSION['userid'])  || $userid != $_SESSION['userid'] || !$userid) showmessage(L('admin_login'),'?m=admin&c=index&a=login');
		}
	}

到这里第一总解决方案就完成了。

第二种解决方案:

大家也知道谷歌浏览器在2020年12月过后就不在支持flash上传。第二种当然是更换phpcms附件上传,改为h5上传。博主在各大搜索引擎找遍了发现是有已经改好了的代码,但是需要收费。

博主这里提供下修改好了的phpcms h5上传代码,此代码只供学习交流,请勿用于商业用途。

phpcms_h5_upload.zip

本文出自:琅枫个人博客。如需转载请注明出处!

本文出处:"https://www.phpfeng.cn/learn/php/528.html"

如果您觉得文章对你有帮助,可以进行打赏。
打赏多少,您高兴就行,谢谢您对琅枫博客的支持! ~(@^_^@)~

微信打赏

琅枫博客微信号

支付宝打赏

琅枫博客个人支付宝
本文关键词:


你想在庞大的互联网上留下一丝足迹?

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

点我了解如何搭建个人博客?