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

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

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

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

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

phpcms后台上传图片提示会话过期解决办法
4.用浏览器查看请求地址,找出原因

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

phpcms后台上传图片提示会话过期解决办法
这是上传成功后的地址

phpcms后台上传图片提示会话过期解决办法
大家可以注意下这个位置,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存储到数据库中。

phpcms后台上传图片提示会话过期解决办法
phpcms后台上传图片提示会话过期解决办法
问题找到了,那么解决问题就变得相对简单了。

解决办法一:修改下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');
		}
	}

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

(1)
上一篇 2022-04-07 11:53
下一篇 2022-04-08 14:42