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登录验证的更多相关文章

  1. ASP.NET MVC 登录验证

     好久没写随笔了,这段时间没 什么事情,领导 一直没安排任务,索性 一直在研究代码,说实在的,这个登录都 搞得我云里雾里的,所以这次我可能也讲得不是 特别清楚,但是 我尽力把我知道的讲出来,顺便也对自 ...

  2. Shiro安全框架入门篇(登录验证实例详解与源码)

    转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...

  3. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  4. AD域登录验证

    AD域登录验证 作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5799699.html 需求 系统在登录的时候,需要根据用户名和密码验证连接域服务器进行 ...

  5. ASP.NET MVC4 Forms 登录验证

    Web.config配置: 在<system.web>节下: <authentication mode="Forms"> <forms loginUr ...

  6. MVC前台页面做登录验证

    最近接触了一个电商平台的前台页面,需要做一个登录验证,具体情况是:当用户想要看自己的订单.积分等等信息,就需要用户登录之后才能查询,那么在MVC项目中我们应该怎么做这个前台的验证呢? 1.我在Cont ...

  7. [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)

          之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类,重写On ...

  8. ThinkPHP之登录验证

    验证方面写的不是很完整,正在完善当中 <?php /** * Created by dreamcms. * User: Administrator * Date: 2016/9/5 * Time ...

  9. ASP.NET MVC3 实现用户登录验证

    自定义一个授权筛选器类,继承于AuthorizeAttribute: using System; using System.Web; using System.Web.Mvc; namespace M ...

随机推荐

  1. 腾讯企业邮箱POP,SMTP分别是什么

    腾讯企业邮箱在做域名解析的时候不用做pop3和 smtp设置,可以使用下列的协议:   POP3/SMTP协议 接收邮件服务器:pop.exmail.qq.com (端口 110),使用SSL,端口号 ...

  2. 学习 TList 类的实现[3] - 不能回避的话题: 内存分配

    在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类 ...

  3. linux环境,crontab报错Authentication token is no longer valid; new one required You (aimonitor) are not allowed to access to (crontab) because of pam configuration.

    问题描述: 今天同事反应,一个系统上的某些数据没有生成,看了下,怀疑定时任务没有执行,就看下了crontab,发现报了下面的错误: [aimonitor@4A-LF-w08 ~]$ crontab - ...

  4. 分布式缓存设计:一致性Hash算法

    缓存作为数据库前的一道屏障,它的可用性与缓存命中率都会直接影响到数据库,所以除了配置主从保证高可用之外还需要设计分布式缓存来扩充缓存的容量,将数据分布在多台机器上如果有一台不可用了对整体影响也比较小. ...

  5. quick-cocos2d-x游戏开发【10】——触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT

    假设看过sample中touch的代码,你会发现演示样例中有一个cc.NODE_TOUCH_CAPTURE_EVENT事件.它和cc.NODE_TOUCH_EVENT触摸事件一样,是引擎级别的事件,我 ...

  6. 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>

    1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...

  7. J2EE开发推荐工具

  8. ajax异步加载回跳定位

    1)首先,问题是这样的:page1在一个滚动到页面底部加载更新的函数(功能),当页面滚动了第二页(或更多页)时,点击链接跳转到了其他页面(page2),在page2有返回按钮,当从page2返回pag ...

  9. 【渗透测试学习平台】 web for pentester -6.命令执行

    命令执行漏洞 windows支持: |           ping 127.0.0.1|whoami           ||              ping  2 || whoami (哪条名 ...

  10. 将Eclipse项目导入到Android studio 中 很多点9图出现问题解决方法

    在build.gradle里添加以下两句: aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false