uchome登录验证
Uchome采用cookie+数据库的方式来进行用户登录验证的
一。登录
1:登录表单由source/do_login.php 处理
2:然后验证用户名以及密码的正确性,不正确则跳转并提示登录失败
3:若验证通过之后,再将获取到得用户账户信息赋给setarr变量数组
4:更新member表
5:将用户登录信息写入到Uchome的session表中
6:将用户名与密码加密写入cookie中
if(submitcheck('loginsubmit')) {
$password = $_POST['password'];
$username = trim($_POST['username']);
$cookietime = intval($_POST['cookietime']);
$cookiecheck = $cookietime?' checked':'';
$membername = $username;
if(empty($_POST['username'])) {
showmessage('users_were_not_empty_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
}
if($_SCONFIG['seccode_login']) {
include_once(S_ROOT.'./source/function_cp.php');
if(!ckseccode($_POST['seccode'])) {
$_SGLOBAL['input_seccode'] = 1;
include template('do_login');
exit;
}
}
//同步获取用户源
if(!$passport = getpassport($username, $password)) {
showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
}
$setarr = array(
'uid' => $passport['uid'],
'username' => addslashes($passport['username']),
'password' => md5("$passport[uid]|$_SGLOBAL[timestamp]")//本地密码随机生成
);
include_once(S_ROOT.'./source/function_space.php');
//开通空间
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('space')." WHERE uid='$setarr[uid]'");
if(!$space = $_SGLOBAL['db']->fetch_array($query)) {
$space = space_open($setarr['uid'], $setarr['username'], 0, $passport['email']);
}
$_SGLOBAL['member'] = $space;
//实名
realname_set($space['uid'], $space['username'], $space['name'], $space['namestatus']);
//检索当前用户
$query = $_SGLOBAL['db']->query("SELECT password FROM ".tname('member')." WHERE uid='$setarr[uid]'");
if($value = $_SGLOBAL['db']->fetch_array($query)) {
$setarr['password'] = addslashes($value['password']);
} else {
//更新本地用户库
inserttable('member', $setarr, 0, true);
}
//清理在线session
insertsession($setarr);
//设置cookie
ssetcookie('auth', authcode("$setarr[password]\t$setarr[uid]", 'ENCODE'), $cookietime); //加密cookie: passowrd和uid
ssetcookie('loginuser', $passport['username'], 31536000);
ssetcookie('_refer', '');
//同步登录
if($_SCONFIG['uc_status']) {
include_once S_ROOT.'./uc_client/client.php';
$ucsynlogin = uc_user_synlogin($setarr['uid']);
} else {
$ucsynlogin = '';
}
//好友邀请
if($invitearr) {
//成为好友
invite_update($invitearr['id'], $setarr['uid'], $setarr['username'], $invitearr['uid'], $invitearr['username'], $app);
}
$_SGLOBAL['supe_uid'] = $space['uid'];
//判断用户是否设置了头像
$reward = $setarr = array();
$experience = $credit = 0;
$avatar_exists = ckavatar($space['uid']);
if($avatar_exists) {
if(!$space['avatar']) {
//奖励积分
$reward = getreward('setavatar', 0);
$credit = $reward['credit'];
$experience = $reward['experience'];
if($credit) {
$setarr['credit'] = "credit=credit+$credit";
}
if($experience) {
$setarr['experience'] = "experience=experience+$experience";
}
$setarr['avatar'] = 'avatar=1';
$setarr['updatetime'] = "updatetime=$_SGLOBAL[timestamp]";
}
} else {
if($space['avatar']) {
$setarr['avatar'] = 'avatar=0';
}
}
if($setarr) {
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET ".implode(',', $setarr)." WHERE uid='$space[uid]'");//更新空间信息
}
if(empty($_POST['refer'])) {
$_POST['refer'] = 'space.php?do=home';
}
realname_get();
showmessage('login_success', $app?"userapp.php?id=$app":$_POST['refer'], 1, array($ucsynlogin));
}
二。验证
1.cp.php
//权限判断
if(empty($_SGLOBAL['supe_uid'])) { //检查supe_uid
if($_SERVER['REQUEST_METHOD'] == 'GET') {
ssetcookie('_refer', rawurlencode($_SERVER['REQUEST_URI'])); //保存网站链接,登录后跳转
} else {
ssetcookie('_refer', rawurlencode('cp.php?ac='.$ac));
}
showmessage('to_login', 'do.php?ac='.$_SCONFIG['login_action']);
}
2.space.php
//是否公开
if(empty($isinvite) && empty($_SCONFIG['networkpublic'])) {
checklogin();//需要登录
}
//检查是否登录
function checklogin() {
global $_SGLOBAL, $_SCONFIG; if(empty($_SGLOBAL['supe_uid'])) { //同样是检查supe_uid
ssetcookie('_refer', rawurlencode($_SERVER['REQUEST_URI']));
showmessage('to_login', 'do.php?ac='.$_SCONFIG['login_action']);
}
}
//判断当前用户登录状态
function checkauth() {
global $_SGLOBAL, $_SC, $_SCONFIG, $_SCOOKIE, $_SN; if($_SGLOBAL['mobile'] && $_GET['m_auth'])
$_SCOOKIE['auth'] = $_GET['m_auth'];
if($_SCOOKIE['auth']) {
@list($password, $uid) = explode("\t", authcode($_SCOOKIE['auth'], 'DECODE')); //解密cookie:password和uid
$_SGLOBAL['supe_uid'] = intval($uid);
if($password && $_SGLOBAL['supe_uid']) {
//判断cookie时保存的内容 是否与 session表或member表里的相同。
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('session')." WHERE uid='$_SGLOBAL[supe_uid]'");
if($member = $_SGLOBAL['db']->fetch_array($query)) {
if($member['password'] == $password) {
$_SGLOBAL['supe_username'] = addslashes($member['username']);
$_SGLOBAL['session'] = $member;
} else {
$_SGLOBAL['supe_uid'] = 0;
}
} else {
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('member')." WHERE uid='$_SGLOBAL[supe_uid]'");
if($member = $_SGLOBAL['db']->fetch_array($query)) {
if($member['password'] == $password) {
$_SGLOBAL['supe_username'] = addslashes($member['username']);
$session = array('uid' => $_SGLOBAL['supe_uid'], 'username' => $_SGLOBAL['supe_username'], 'password' => $password);
include_once(S_ROOT.'./source/function_space.php');
insertsession($session);//登录
} else {
$_SGLOBAL['supe_uid'] = 0;
}
} else {
$_SGLOBAL['supe_uid'] = 0;
}
}
}
}
//都不相同,则清除cookie
if(empty($_SGLOBAL['supe_uid'])) {
clearcookie();
} else {
$_SGLOBAL['username'] = $member['username'];
}
}
uchome登录验证的更多相关文章
- ASP.NET MVC 登录验证
好久没写随笔了,这段时间没 什么事情,领导 一直没安排任务,索性 一直在研究代码,说实在的,这个登录都 搞得我云里雾里的,所以这次我可能也讲得不是 特别清楚,但是 我尽力把我知道的讲出来,顺便也对自 ...
- Shiro安全框架入门篇(登录验证实例详解与源码)
转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- AD域登录验证
AD域登录验证 作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5799699.html 需求 系统在登录的时候,需要根据用户名和密码验证连接域服务器进行 ...
- ASP.NET MVC4 Forms 登录验证
Web.config配置: 在<system.web>节下: <authentication mode="Forms"> <forms loginUr ...
- MVC前台页面做登录验证
最近接触了一个电商平台的前台页面,需要做一个登录验证,具体情况是:当用户想要看自己的订单.积分等等信息,就需要用户登录之后才能查询,那么在MVC项目中我们应该怎么做这个前台的验证呢? 1.我在Cont ...
- [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)
之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类,重写On ...
- ThinkPHP之登录验证
验证方面写的不是很完整,正在完善当中 <?php /** * Created by dreamcms. * User: Administrator * Date: 2016/9/5 * Time ...
- ASP.NET MVC3 实现用户登录验证
自定义一个授权筛选器类,继承于AuthorizeAttribute: using System; using System.Web; using System.Web.Mvc; namespace M ...
随机推荐
- thinkphp 解析带html标签的内容
1.实例一 <?php echo htmlspecialchars_decode($goodsinfo['Specification']);?> 2.实例二 {$show.article| ...
- 调用外部 DLL 中的函数(2. 晚绑定)
, b, t, );end; procedure TForm1.FormDestroy(Sender: TObject);begin FreeLibrary(inst); {记得释放}end; e ...
- 通过phoenix查看hbase中表的结构
需求描述: 今天一个同事,问如何在phoenix中查询hbase中表的结构,在此记录下. 操作过程: 1.通过phoenix客户端连接到hbase数据库 [aiprd@host---- bin]$ . ...
- WPF 跟踪命令和撤销命令(复原)
WPF 命令模型缺少一个特性是复原命令.尽管提供了一个 ApplicationCommands.Undo 命令,但是该命令通常被用于编辑控件(如 TextBox 控件),以维护它们自己的 Undo 历 ...
- Spring------Spring data jpa 定义实体类(@OneToMany等的使用)
转载: https://course.tianmaying.com/spring-data-jpa+one-to-many#2
- 超全面的JavaWeb笔记day04<dom树等>
1.案例:在末尾添加节点(*****) 创建标签 createElement方法 创建文本 createTextNode方法 把文本添加到标签下面 appendChild方法 2.元素对象(了解) 如 ...
- PHP虚拟主机的配置
今天配置了一下虚拟目录,以下是我的配置方法. 1 编辑httpd.conf,查找Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉. 2 编辑htt ...
- CentOS-6.3安装配置Nginx--【测试已OK】
安装说明 系统环境:CentOS-6.3软件:nginx-1.2.6.tar.gz安装方式:源码编译安装 安装位置:/usr/local/nginx 下载地址:http://nginx.org/en/ ...
- (三)微信小程序之发送服务通知(模板消息)
1.后端获取AccessToken返回给微信端 微信小程序端请求后端得到AccessToken 2.后端获取openid返回给微信端 微信小程序端登录请求后端得到openid 3.发送消息 ...
- List转换为数组Array的方法
List<String> list = new ArrayList<String>(); list.add("str1"); list.add(" ...