数据库:

/*
Navicat MySQL Data Transfer Source Server : 本地连接
Source Server Version : 50710
Source Host : localhost:3306
Source Database : message Target Server Type : MYSQL
Target Server Version : 50710
File Encoding : 65001 Date: 2016-02-09 23:33:55
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for ms_user
-- ----------------------------
DROP TABLE IF EXISTS `ms_user`;
CREATE TABLE `ms_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) DEFAULT NULL,
`password` char(32) DEFAULT NULL,
`logintime` int(10) DEFAULT '1',
`loginip` varchar(30) DEFAULT NULL,
`lock` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

验证规则:

1、判断是否为POST提交
2、判断验证码是否正确
3、获取用户名,密码
4、根据用户名,密码查询数据库数据
5、判断用户是否锁住
6、更新登录时间,登录ip
7、存储session,id,username,logintime,loginip
8、跳转页面

代码:

/**
* 验证登录
*/
public function dologin(){
//是否非法操作
if ( !IS_POST ) $this->error('操作异常,请重新登录!'); //验证码是否正确
if ( I('code', '', 'md5') != $_SESSION['verify'] ) $this->error('验证码错误!'); //验证账号密码
$verifyData = array(
'username'=>I('username'),
'password'=>I('password', '', 'md5'),
);
if ( !$user = M('User')->where($verifyData)->find() ) $this->error('账号或密码错误!'); //判断用户是否锁定
if ( $user['lock'] == 1 ) $this->error('用户被锁定!'); //更新登录数据
$updateData = array(
'id' => $user['id'],
'logintime' => time(),
'loginip' => get_real_ip(),
);
if ( !$res = M('User')->save($updateData) ) $this->error('更新数据失败,请重新登录!'); //写入session
$_SESSION['id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['logintime'] = $user['logintime'];
$_SESSION['loginip'] = $user['loginip'];
if ( !isset($_SESSION['id'])
|| !isset($_SESSION['username'])
|| !isset($_SESSION['logintime'])
|| !isset($_SESSION['loginip']) ) {
$this->error('操作异常,请重新登录!');
} //跳转页面
$this->redirect('/Admin/Index/index');
}

ThinkPHP - 登录流程的更多相关文章

  1. 如何设计一个 App 的注册登录流程?

    移 动设备发力之前的登录方式很简单:用户名/邮箱+密码+确认密码,所有的用户登录注册都是围绕着邮箱来做.随着移动设备和社交网络的普及,邮箱不再是唯 一,渐渐的出现了微博,QQ,微信等第三方登录方式,手 ...

  2. 用户登录流程详解 +volley(StringRequest)

    在实习期间由于要求使用volley,所以第一次开始接触volley,从一开始的迷茫陌生,到疯狂的查找各种资料,通过在项目中用到的实际问题,我想做一些总结,所以写了这篇文章.下面我将介绍我理解的用户登录 ...

  3. 二维码闪电登录流程详解,附demo(1/2)

    二维码,最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设 ...

  4. 微信小程序登录流程

    小程序登录流程 参考 app.js需要做的 1,首先通过wx.login()拿到code,成功之后,发送数据,请求接口,把code发送给后端,换区openid,sessionKey,unionId,把 ...

  5. 小程序页面跳转传参-this和that的区别-登录流程-下拉菜单-实现画布自适应各种手机尺寸

    小程序页面跳转传参 根目录下的 app.json 文件 页面文件的路径.窗口表现.设置网络超时时间.设置多 tab { "pages": [ "pages/index/i ...

  6. ThinkPHP登录功能的实现方法

    登陆功能是PHP程序设计中常见的功能.本文ThinkPHP实例主要完成注册成功后进入首页,并告诉你是登录用户的功能.具体实现步骤如下: 第一步:在config.php文件中加上: 完整实现代码如下: ...

  7. Vue + Element UI 实现权限管理系统(优化登录流程)

    完善登录流程 1. 丰富登录界面 1.1 从 Element 指南中选择组件模板丰富登录界面,放置一个登录界面表单,包含账号密码输入框和登录重置按钮. <template> <el- ...

  8. ASP.net 完整登录流程

    登录流程 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syst ...

  9. Vue + Element UI 实现权限管理系统 前端篇(四):优化登录流程

    完善登录流程 1. 丰富登录界面 1.1 从 Element 指南中选择组件模板丰富登录界面,放置一个登录界面表单,包含账号密码输入框和登录重置按钮. <template> <el- ...

随机推荐

  1. mysql 多重游标嵌套

    1.DECLARE CONTINUE HANDLER FOR NOT FOUND 在mysql的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND ...

  2. linux里source、sh、bash、./有什么区别

    在linux里,source.sh.bash../都可以执行shell script文件,那它们有什么不同吗? ----------- 1.source source a.sh 在当前shell内去读 ...

  3. [LeetCode]题解(python):069-Sqrt(x)

    题目来源: https://leetcode.com/problems/sqrtx/ 题意分析: 实现一个整型的开根. 题目思路: 利用牛顿迭代法可以求解.首先讲数据类型转成浮点数,然后选取初始值为n ...

  4. Hidden String(深搜)

    Hidden String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  5. Ubuntu 12.10 安装JDK7

    1.首先到oracle下载上下载jdk-7u25-linux-i586.tar.gz 2.将jdk-7u25-linux-i586.tar.gz复制到/usr/lib/jvm/目录以下,这里假设没有j ...

  6. mahout贝叶斯算法开发思路(拓展篇)1

    首先说明一点,此篇blog解决的问题是就下面的数据如何应用mahout中的贝叶斯算法?(这个问题是在上篇(...完结篇)blog最后留的问题,如果想直接使用该工具,可以在mahout贝叶斯算法拓展下载 ...

  7. Html.raw(转帖)

    Razor 在JS中嵌入后台变量 HTML 中定义全局变量 @{int CurrentUserId =ViewBag.CurrentUserId;} JS中取值方式var CurrentUserId ...

  8. 页面布局之BFC 微微有点坑

    一.什么是BFC: 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...

  9. CSS的position(位置)

    position: 位置,absolute绝对位置,相对于浏览器边界的位置:relative相对位置,相对于它本应该出现的位置.fixed:固定位置,它不会随着滚动. 设置好position之后,就可 ...

  10. 学习validate

    jQuery Validate (转自http://www.w3cschool.cc/jquery/jquery-plugin-validate.html?utm_source=tuicool) jQ ...