thinkphp实现注册登录功能
浏览:25238发布日期:2015/06/30分类:技术分享 关键字:thinkphp登录注册
使用最新的thinkphp3.2.3版本,需要注意命名空间的使用。
均为后台验证,前台ajax验证未做处理。后续加上。。。
登录时,更新用户数据,登录ip和登录时间,以及登录次数+1,此实现方便不知是否合适,待验证。
源码地址:https://github.com/grh0812/thinkphp-login-register
创建数据库 :
均为后台验证,前台ajax验证未做处理。后续加上。。。
登录时,更新用户数据,登录ip和登录时间,以及登录次数+1,此实现方便不知是否合适,待验证。
源码地址:https://github.com/grh0812/thinkphp-login-register
创建数据库 :
- /*
- NavicatMySQLDataTransfer
- SourceServer:本地连接
- SourceServerVersion:50617
- SourceHost:localhost:3306
- SourceDatabase:crm
- TargetServerType:MYSQL
- TargetServerVersion:50617
- FileEncoding:65001
- Date:2015-06-2923:55:28
- */
- SETFOREIGN_KEY_CHECKS=0;
- ------------------------------
- --Tablestructureforthink_users
- ------------------------------
- DROPTABLEIFEXISTS`think_users`;
- CREATETABLE`think_users`(
- `userid`mediumint(8)unsignedNOTNULLAUTO_INCREMENTCOMMENT‘用户id‘,
- `companyid`mediumint(8)unsignedNOTNULLCOMMENT‘公司id‘,
- `pid`mediumint(8)NOTNULLCOMMENT‘父id‘,
- `username`char(20)NOTNULLDEFAULT‘‘COMMENT‘用户名‘,
- `password`char(32)NOTNULLDEFAULT‘‘COMMENT‘密码‘,
- `nickname`char(20)NOTNULLDEFAULT‘‘COMMENT‘昵称‘,
- `regdate`int(10)unsignedNOTNULLCOMMENT‘注册时间‘,
- `lastdate`int(10)unsignedNOTNULLCOMMENT‘最后一次登录时间‘,
- `regip`char(15)NOTNULLDEFAULT‘‘COMMENT‘注册ip‘,
- `lastip`char(15)NOTNULLDEFAULT‘‘COMMENT‘最后一次登录ip‘,
- `loginnum`smallint(5)unsignedNOTNULLDEFAULT‘0‘COMMENT‘登录次数‘,
- `email`char(32)NOTNULLDEFAULT‘‘COMMENT‘邮箱‘,
- `mobile`char(11)NOTNULLDEFAULT‘‘COMMENT‘手机号码‘,
- `islock`tinyint(1)unsignedNOTNULLDEFAULT‘0‘COMMENT‘是否锁定‘,
- `vip`tinyint(1)unsignedNOTNULLDEFAULT‘0‘COMMENT‘是否会员‘,
- `overduedate`int(10)unsignedNOTNULLCOMMENT‘账户过期时间‘,
- `status`tinyint(1)unsignedNOTNULLDEFAULT‘0‘COMMENT‘状态-用于软删除‘,
- PRIMARYKEY(`userid`),
- UNIQUEKEY`username`(`username`)USINGBTREE,
- KEY`email`(`email`)USINGBTREE
- )ENGINE=MyISAMAUTO_INCREMENT=5DEFAULTCHARSET=utf8;
复制代码
创建模型(用于自动验证, 自动完成) :- namespaceHome\Model;
- useThink\Model;
- classUsersModelextendsModel{
- /**
- *自动验证
- *self::EXISTS_VALIDATE或者0存在字段就验证(默认)
- *self::MUST_VALIDATE或者1必须验证
- *self::VALUE_VALIDATE或者2值不为空的时候验证
- */
- protected$_validate=array(
- array(‘nickname‘,‘require‘,‘昵称不能为空!‘),//默认情况下用正则进行验证
- array(‘username‘,‘require‘,‘用户名不能为空!‘),//默认情况下用正则进行验证
- array(‘username‘,‘‘,‘该用户名已被注册!‘,0,‘unique‘,1),//在新增的时候验证name字段是否唯一
- array(‘email‘,‘‘,‘该邮箱已被占用‘,0,‘unique‘,1),//新增的时候email字段是否唯一
- array(‘mobile‘,‘‘,‘该手机号码已被占用‘,0,‘unique‘,1),//新增的时候mobile字段是否唯一
- //正则验证密码[需包含字母数字以及@*#中的一种,长度为6-22位]
- array(‘password‘,‘/^([a-zA-Z0-9@*#]{6,22})$/‘,‘密码格式不正确,请重新输入!‘,0),
- array(‘repassword‘,‘password‘,‘确认密码不正确‘,0,‘confirm‘),//验证确认密码是否和密码一致
- array(‘email‘,‘email‘,‘邮箱格式不正确‘),//内置正则验证邮箱格式
- array(‘mobile‘,‘/^1[34578]\d{9}$/‘,‘手机号码格式不正确‘,0),//正则表达式验证手机号码
- array(‘verify‘,‘verify_check‘,‘验证码错误‘,0,‘function‘),//判断验证码是否正确
- //array(‘agree‘,‘is_agree‘,‘请先同意网站安全协议!‘,1,‘callback‘),//判断是否勾选网站安全协议
- array(‘agree‘,‘require‘,‘请先同意网站安全协议!‘,1),//判断是否勾选网站安全协议
- );
- /**
- *自动完成
- */
- protected$_auto=array(
- array(‘password‘,‘md5‘,3,‘function‘),//对password字段在新增和编辑的时候使md5函数处理
- array(‘regdate‘,‘time‘,1,‘function‘),//对regdate字段在新增的时候写入当前时间戳
- array(‘regip‘,‘get_client_ip‘,1,‘function‘),//对regip字段在新增的时候写入当前注册ip地址
- );
- /**
- *判断是否同意网站安全管理协议
- *@returnbool
- */
- protectedfunctionis_agree()
- {
- //获取POST数据
- $agree=I(‘post.agree‘,0,‘intval‘);
- //验证
- if($agree){
- returntrue;
- }else{
- returnfalse;
- }
- }
复制代码
登录注册 :- namespaceHome\Controller;
- useThink\Controller;
- /**
- *ClassLoginController
- *@packageHome\Controller
- */
- classLoginControllerextendsController{
- /**
- *用户登录
- */
- publicfunctionlogin()
- {
- //判断提交方式
- if(IS_POST){
- //实例化Login对象
- $login=D(‘login‘);
- //自动验证创建数据集
- if(!$data=$login->create()){
- //防止输出中文乱码
- header("Content-type:text/html;charset=utf-8");
- exit($login->getError());
- }
- //组合查询条件
- $where=array();
- $where[‘username‘]=$data[‘username‘];
- $result=$login->where($where)->field(‘userid,username,nickname,password,lastdate,lastip‘)->find();
- //验证用户名对比密码
- if($result&&$result[‘password‘]==$result[‘password‘]){
- //存储session
- session(‘uid‘,$result[‘userid‘]);//当前用户id
- session(‘nickname‘,$result[‘nickname‘]);//当前用户昵称
- session(‘username‘,$result[‘username‘]);//当前用户名
- session(‘lastdate‘,$result[‘lastdate‘]);//上一次登录时间
- session(‘lastip‘,$result[‘lastip‘]);//上一次登录ip
- //更新用户登录信息
- $where[‘userid‘]=session(‘uid‘);
- M(‘users‘)->where($where)->setInc(‘loginnum‘);//登录次数加1
- M(‘users‘)->where($where)->save($data);//更新登录时间和登录ip
- $this->success(‘登录成功,正跳转至系统首页...‘,U(‘Index/index‘));
- }else{
- $this->error(‘登录失败,用户名或密码不正确!‘);
- }
- }else{
- $this->display();
- }
- }
- /**
- *用户注册
- */
- publicfunctionregister()
- {
- //判断提交方式做不同处理
- if(IS_POST){
- //实例化User对象
- $user=D(‘users‘);
- //自动验证创建数据集
- if(!$data=$user->create()){
- //防止输出中文乱码
- header("Content-type:text/html;charset=utf-8");
- exit($user->getError());
- }
- //插入数据库
- if($id=$user->add($data)){
- /*直接注册用户为超级管理员,子用户采用邀请注册的模式,
- 遂设置公司id等于注册用户id,便于管理公司用户*/
- $user->where("userid=$id")->setField(‘companyid‘,$id);
- $this->success(‘注册成功‘,U(‘Index/index‘),2);
- }else{
- $this->error(‘注册失败‘);
- }
- }else{
- $this->display();
- }
- }
- /**
- *用户注销
- */
- publicfunctionlogout()
- {
- //清楚所有session
- session(null);
- redirect(U(‘Login/login‘),2,‘正在退出登录...‘);
- }
- /**
- *验证码
- */
- publicfunctionverify()
- {
- //实例化Verify对象
- $verify=new\Think\Verify();
- //配置验证码参数
- $verify->fontSize=14;//验证码字体大小
- $verify->length=4;//验证码位数
- $verify->imageH=34;//验证码高度
- $verify->useImgBg=true;//开启验证码背景
- $verify->useNoise=false;//关闭验证码干扰杂点
- $verify->entry();
- }
- }
复制代码
登录模版 :- <formaction="__SELF__"method="post">
- <div>
- <inputtype="text"name="username"placeholder="用户名"/>
- <span></span>
- </div>
- <div>
- <inputtype="password"name="password"placeholder="密码"/>
- <span></span>
- </div>
- <div>
- <inputtype="text"name="verify"placeholder="验证码"style="width:200px;"/>
- <spanstyle="right:120px;"></span>
- <imgsrc="{:U(verify)}"alt="验证码"/>
- </div>
- <div>
- <div>
- <div>
- <label>
- <inputtype="checkbox"name="remember"value="1">记住我
- </label>
- </div>
- </div><!--/.col-->
- <div>
- <buttontype="submit">登录</button>
- </div><!--/.col-->
- </div>
- </form>
复制代码
注册模版 :- <div>
- <p>注册一个新用户</p>
- <formaction="__SELF__"method="post">
- <div>
- <inputtype="text"name="nickname"placeholder="昵称"/>
- <span></span>
- </div>
- <div>
- <inputtype="text"name="username"placeholder="用户名"/>
- <span></span>
- </div>
- <div>
- <inputtype="password"name="password"placeholder="密码"/>
- <span></span>
- </div>
- <div>
- <inputtype="password"name="repassword"placeholder="确认密码"/>
- <span></span>
- </div>
- <div>
- <inputtype="email"name="email"placeholder="邮箱"/>
- <span></span>
- </div>
- <div>
- <inputtype="text"name="mobile"placeholder="手机号码"/>
- <span></span>
- </div>
- <div>
- <inputtype="text"name="verify"placeholder="验证码"style="width:200px;"/>
- <spanstyle="right:120px;"></span>
- <imgsrc="{:U(verify)}"alt="验证码"/>
- </div>
- <div>
- <div>
- <div>
- <label>
- <inputtype="checkbox"name="agree"value="1">我同意<ahref="#">网站安全协议</a>
- </label>
- </div>
- </div><!--/.col-->
- <div>
- <buttontype="submit">点击注册</button>
- </div><!--/.col-->
- </div>
- </form>
- <ahref="login.html">我已经注册了账户</a>
- </div>
复制代码
困扰:
注册的账户全都是管理员账户, 子
注册的账户全都是管理员账户, 子
知识推荐
- 一、.Net基础【1.8】递归
- CSS reset样式重置
- 在VS2015中增加JQuery引用及智能提示
- AMD,CMD.CommonJs和UMD还有es6的模块化对比
- webstorm激活+汉化教程
- .Net Email操作类
- 认识AJAX及函数使用
- 前端用js获取本地文件的内容
- ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目
- 上传图片-水印-文字水印
- react.js中render的return的坑
- HTML js 复习
- JQuery属性与样式——.html()和.text()
- 最详细的jsx和babel的区别
- IIS7上传4M文件以上文件出现“Post大小超出允许的限制”错误解决方法
- 计算机网络(NETWORK 部分二) 第5-6天
- 模糊查询基于select遍历json文件自动填充的实现
- httpd之curl命令
我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8
不良信息举报平台
互联网安全管理备案
Copyright 2023 www.wodecom.cn All Rights Reserved