phpcms sp4系统中管理员登陆的原理

简介: phpcms sp4系统是个不错的系统,后台的文件也安排的非常有序,一般是以file的参数的值为文件名+.inc.php文件,里面使用的是switch语句来响应不同的action大概上说下后台管理员的登录过程,实现的动作是使用login.inc.php文件 if($dosubmit){ require PHPCMS_ROOT.'languages/'.LANG.'/member.
phpcms sp4系统是个不错的系统,后台的文件也安排的非常有序,一般是以file的参数的值为文件名+.inc.php文件,里面使用的是switch语句来响应不同的action

大概上说下后台管理员的登录过程,实现的动作是使用login.inc.php文件

if($dosubmit)
{
	require PHPCMS_ROOT.'languages/'.LANG.'/member.lang.php';
	require PHPCMS_ROOT.'member/include/member.class.php';
	$member = new member();
	if(!isset($forward)) $forward = URL;
	if(!isset($checkcodestr)) $checkcodestr = '';
	if($code->check()) checkcode($checkcodestr, 1, HTTP_REFERER);
	$result = $member->login($username, $password);
 member类的实现文件在
member.class.php文件中


function login($username, $password, $cookietime = 0)
{
//...............
		if(!$cookietime) $get_cookietime = get_cookie('cookietime');
		$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
		$cookietime = $_cookietime ? TIME + $_cookietime : 0;
		$phpcms_auth_key = md5(AUTH_KEY.$_SERVER['HTTP_USER_AGENT']);
		$phpcms_auth = phpcms_auth($this->_userid."\t".$md5_password, 'ENCODE', $phpcms_auth_key);
		set_cookie('auth', $phpcms_auth, $cookietime);
		set_cookie('cookietime', $_cookietime, $cookietime);
//...............
}



后台的登录的过程是使用用户名检索出加密后的密码,然后与前台输入过来的密码,加密并进行比较,如果相同,那就设置"auth",cookie到前台,cookie中包含用户名与密码,加密过的然后转向到"?",也就是当前admin文件,

在admin.php中包含的include/common.inc.php中

$phpcms_auth = get_cookie('auth');
if($phpcms_auth)
{
	$auth_key = md5(AUTH_KEY.$_SERVER['HTTP_USER_AGENT']);
	list($_userid, $_password) = explode("\t", phpcms_auth($phpcms_auth, 'DECODE', $auth_key));
	$_userid = intval($_userid);
	$sql_member = "SELECT * FROM `".DB_PRE."member_cache` WHERE `userid`=$_userid";
	$r = $db->get_one($sql_member);
	if(!$r && cache_member())
	{
		$r = $db->get_one($sql_member);
	}
	if($r && $r['password'] === $_password)
	{
		if($r['groupid'] == 2)
		{
			set_cookie('auth', '');
			showmessage($LANG['userid_banned_by_administrator']);
		}
		@extract($r, EXTR_PREFIX_ALL, '');
	}
	else
	{
		$_userid = 0;
		$_username = '';
		$_groupid = 3;
		set_cookie('auth', '');
	}
	unset($r, $phpcms_auth, $phpcms_auth_key, $_password, $sql_member);
}


首页判断cookie("auth")是否有值,如果有值,先解密,找出userid,并在数据库上检索出password与当前的password是否相同,如果相同就通过,如果不同那就清除cookie,转向到登录界面

相关文章
|
传感器 物联网 测试技术
Django如何快速连接MQTT
Django如何快速连接MQTT
392 0
|
Linux KVM 虚拟化
在Linux中,如何进行虚拟机和容器的备份和迁移?
在Linux中,如何进行虚拟机和容器的备份和迁移?
|
JavaScript
基于Element UI或Element Plus实现具有倒计时的Message消息提示
本文介绍了如何在Element UI或Element Plus框架中实现具有倒计时功能的消息提示组件,支持多次点击生成多个独立倒计时的消息提示,并提供了详细的实现代码和使用示例。
1127 1
基于Element UI或Element Plus实现具有倒计时的Message消息提示
|
算法 Python
Scipy 中级教程——优化
Scipy 中级教程——优化【1月更文挑战第6篇】
438 1
|
XML 数据库 网络虚拟化
Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新(上)
Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新
633 0
|
JavaScript API CDN
一个功能强大、好看的vue表格组件
支持Vue 3/Vue 2的一个表格组件,支持表格增删改、虚拟表格、复杂表格、树形表格、数据校验、懒加载、分页、弹窗、单元格样式设置、按钮自定义样式、表头样式、单元格合等功能。
2608 0
一个功能强大、好看的vue表格组件
|
数据安全/隐私保护
pyton对txt文件的读取写入和加密(含代码)
pyton对txt文件的读取写入和加密(含代码)
431 0
九大数据分析方法:MECE法
今天继续分享九大数据分析方法系列。上一篇说到,当我们要分析的问题,受到太多因素的影响的时候,经常会不知道从哪里下手。这时候,需要把各种影响因素梳理清楚,就需要用到MECE
579 0
九大数据分析方法:MECE法
|
XML Java 数据库
Spring之路(31)–使用NamedParameterJdbcTemplate完成数据库操作(JavaConfig配置)
本文目录 1. 背景 2. 在配置类中配置数据源和namedParameterJdbcTemplate 3. 实现数据库操作组件BlogDao 4. 将BlogDao注册为bean 5. 测试 6. 总结
913 0
|
Android开发
关于Android Studio 打包APK时debug安装可以安装, release 无法安装问题
今天打包一个apk发给系统定制方进行系统内置,但是打包apk之后进行测试安装时到问题,打包好的release版本apk无法在测试机上面进行安装,问候度娘之后归类出如下解决方法: 1、第一种产生的原因是: 问题产生 原因 如图,在打包 release 版本时候,仅选择了v2 (Full APK Signature)这个勾选出框,导致安装的时候 测试机会进行报错,无法安装app 第一种解决方式为: 解决方式 将两个勾选框全部勾选上即可顺利安装 2、第二个解决方式简单粗暴,但是我没有尝试,但是按照道理来说可行。
2720 0