精华内容
下载资源
问答
  • 主要介绍了TP5框架简单登录功能实现方法,结合实例形式分析了thinkPHP5框架登录功能控制器、视图、登录验证等相关操作技巧,需要的朋友可以参考下
  • 因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
  • TP5.1登录源码

    2018-10-28 16:18:40
    融合了门面类,工具类,钩子,中间件做成的登录模块,代码都是经过优化过的,适用于学习
  • 主要介绍了tp5框架使用cookie加密算法实现登录功能,结合实例形式分析了thinkPHP5使用cookie加密算法的原理及登录功能相关操作技巧,需要的朋友可以参考下
  • TP5.1 登录验证及拦截

    2020-08-17 17:45:01
    TP5.1 登录验证及拦截 1 HTML 1.1 关键代码 1.2 界面展示 2 JS 3 PHP 3.1 登录验证 3.2 登录拦截 4 拦截实现 4.1 父类 4.2 子类 4.3 其他页面 4.4 Session失效的情况 4.41 对于主页面的子页拦截 4.42 主动请求的判断...

    登录只做记录不做解释,重点是拦截。

    1 HTML

    1.1 关键代码

    页面用了layui的表单样式(class),
    内置的表单验证( required lay-verify="required"),
    以及表单提交操作( lay-filter="submit_login" lay-submit)。
    

    login.html

    <div style="height: 400px;margin-top: 100px">
    	<div class="layui-form layui-form-pane" style="text-align: center;">
    		<form>
    			<div class="layui-form-item">
    				<div class="layui-inline">
    					<label for="username" class="layui-form-label">用户名</label>
    					<div class="layui-input-inline">
    						<input  type="text" 
    								name="username" 
    								required lay-verify="required" 
    								autocomplete="off" 
    								class="layui-input">
    					</div>
    				</div>
    			</div>
    			<div class="layui-form-item">
    				<div class="layui-inline">
    					<label for="userpwd" class="layui-form-label">密码</label>
    					<div class="layui-input-inline">
    						<input  type="password" 
    								name="userpwd" 
    								required lay-verify="required" a
    								utocomplete="off" 
    								class="layui-input">
    					</div>
    				</div>
    			</div>
    			<div class="layui-form-item">
    				<button class="layui-btn" 
    						lay-filter="submit_login" 
    						lay-submit>立即登录</button>
    			</div>
    		</form>
    	</div>
    </div>
    
    

    1.2 界面展示

    1.登陆界面
    在这里插入图片描述
    2.判空验证
    在这里插入图片描述
    3.登陆失败
    在这里插入图片描述
    在这里插入图片描述
    4.登录失效
    在这里插入图片描述

    2 JS

    用了layui的表单提交
    

    data.field数据
    login.js

    layui.use('form', function(){
    	var form = layui.form;
    	//监听提交
    	form.on('submit(submit_login)', function(data){
        	$.ajax({
    			type: "post",
    			dataType: "json",
    			data: data.field,
    			url: "../Login/login_check",
    			async: false,
    			success: function(msg) {
    				if (msg == 0) {
    					layer.alert('用户名或密码错误');
    				} else if(msg == 2){
    					layer.alert('该用户为不可用状态');
    				} else {
    					location.href = msg;
    				}
    			},
    			error: function(XMLHttpRequest, textStatus, errorThrown) {
    				alert(textStatus + "," + XMLHttpRequest.readyState + "," + XMLHttpRequest.status);
    			}
    		})
    		//防止提交后刷新
        	return false;
    	});
    });
    

    3 PHP

    3.1 登录验证

    Login.php

    <?php
    namespace app\controller;
    
    use think\Controller;
    
    class Login extends controller
    {
    	
    	function login_check(){
            $where['username'] = input('username');
            $where['userpwd'] = input('userpwd');
    
            $result = db('user')->where($where)->find();
            if($result == null){
                //用户名或密码错误
                return 0;
            }else{
                if($result['userstatus'] == 1){
                    //登录成功
                    session('user',$result);
                    return url('Admin/index');
                }else{
                    //该用户为不可用状态
                    return 2;
                }
            }
        }
    }
    

    3.2 登录拦截

    登录拦截是为了防止用户越过登录页面,直接输入网址进入数据操作。是登陆后session失效,这时候再去访问数据库就要500了。

    关于登录拦截的思路:

    1. 首先想的是监控session,但是没有找到方法,放弃;
    2. 行为和钩子:理论可行,没有采用;
    3. JS
      监控鼠标停留时长,超时提示并退出登录。
      这个可行,在退出之前就提示,而不是退出后进行操作发现已经退出了导致已有的东西没保存。不过我没有选用这种操作,我觉得会影响页面响应效率。
    4. 控制器中间件
      不存在重定向冲突,是对单个控制器生效的局部中间件,需要在所有有拦截需要的控制器定义middleware属性。登录拦截是全局性操作,因而中间件不够简便。
    5. BaseController 的控制器初始化 initialize
      父类(BaseController.php)继承Controller,子类继承BaseController。父类初始化方法initialize中判断登陆状态,该方法会在调用控制器的方法之前首先执行。本站用这种方式

    4 拦截实现

    关于控制器初始化,先看官方文档

    4.1 父类

    在父类初始化方法中判断登录状态。

    BaseController.php

    <?php
    namespace app\controller;
    
    use think\Controller;
    
    class BaseController extends Controller
    {
    	public function initialize(){
    		if(!session('?user')){
                $this->success('未检测到登陆状态,已为您跳转登录', 'Login/index');
            }
    	}
    }
    

    4.2 子类

    需要做登录拦截的控制器继承BaseCotroller,整个后台除了登录都需要在登录状态下进行。继承了父类的子类所有方法执行前都会先调用父类的初始方法,达到想操作先登录的目的。越过登录直接地址访问内部,就会被强行跳转到登录。
    User.php

    <?php
    namespace app\controller;
    
    use app\controller\BaseController;
    
    class User extends BaseController
    {
    	···
    }
    

    4.3 其他页面

    登录页面是不需要做登录验证的,这些不需要做登录页面的就不要继承BaseController,正常去继承Controller。如3.1登录验证的Login.php所示。

    4.4 Session失效的情况

    理论上Session失效在访问时一样会重定向到登录,我的主页是ajax去调用子页放到页面里实现局部刷新,因此失效时再去调用子页,整体页面重定向就失效了。

    4.41 对于主页面的子页拦截

    对于被拦截的页面,会返回拦截信息,在js的返回结果里判断状态码,然后js重定向就行了。当然,前提是所请求的控制器方法会被拦截,也就是控制器是继承了BaseController的。

    if(msg.code == 1){
    	location.href = 'Login/index';
    	return;
    }
    

    4.42 主动请求的判断拦截

    这个操作可以解决一切拦截问题,但是如果每一步操作都去先判断登录状态再进行操作那就是推垃圾代码了,只能是一次两次的特殊情况特殊对待。在进行操作之前去判断session,得到结果后做响应操作。

    这一点我用在了提交文章的判断上,因为提交是弹出iframe,如果没有登陆状态,iframe触发了拦截,自动跳到登录页面,就会造成窗口套窗口,小窗口里是登录页,登进去又一个主页。所以在点击提交后先手动触发登录判断。
    js

    $("#article_add").click(function(){
          $.ajax({
            type: "post",
            url: "../Login/login_judge",
            success: function(msg) {
              if(msg == 0){
                console.log('msg');
                parent.layer.alert('无登录状态,为防丢失当前页面文章内容,请另行打开新页面,登陆后重新提交!');
              }else{
               ···
              }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
              alert(textStatus + "," + XMLHttpRequest.readyState + "," + XMLHttpRequest.status);
            }
          })
        });
    

    ../Login/login_judge

    function login_judge(){
        if(!session('?user')){
            return 0;
        }else{
            return 1;
        }
    }
    

    html
    在这里插入图片描述
    啊啊啊啊这个判断看着好蠢啊,没有任何意义单纯判断的交互,目前没有想到别的解决办法。

    5 总结

    到此为止,全程记录完毕。
    我编程的问题暴露无遗,在解决问题方面的狭隘,遇见一个解决一个,没有良好的大局观。对于登录拦截,session失效的操作,我并不满意目前的实现。

    控制器初始化不适用于所有方法;
    控制器中间件需要在每一个控制器引用,不需要的可以单独屏蔽;

    我在控制器初始化的基础上另外又做了主动判断,这一点是我最无法忍受的。如果有一个session失效后可以进行的操作,那这一切迎刃而解。

    展开全文
  • tp3.2微信授权登录代码,新手建议多看看使用,老手不喜欢勿喷,谢谢
  • thinkphp集成支付(手机端H5支付,PC扫码支付,登录)thinkphp集成支付(手机端H5支付,PC扫码支付,登录)thinkphp集成支付(手机端H5支付,PC扫码支付,登录)thinkphp集成支付(手机端H5支付,PC扫码支付,登录)
  • tp5 登录次数限定

    2019-03-03 16:37:05
    所以获取当前时间戳-600同时获取限制登录时的时间戳4 6、在密码不正确 是给新建表中num加1 同时在失败次数为4次是将num 值清空(因为下一次失败就是5了 直接在第四次清空 同时获取当前的时间戳...

    1、 创建一个单独的数据库
    在这里插入图片描述
    2、通过账户和权限来查询判断有没有记录
    在这里插入图片描述
    3、同时判断新建表中有没有该用户的记录
    在这里插入图片描述
    4、如果新建表中没有该记录就插入一条id数据
    在这里插入图片描述
    5、我规定的是10分钟内限制登录
    所以获取当前时间戳-600同时获取限制登录时的时间戳4
    在这里插入图片描述
    在这里插入图片描述
    6、在密码不正确 是给新建表中num加1 同时在失败次数为4次是将num 值清空(因为下一次失败就是5了 直接在第四次清空 同时获取当前的时间戳)
    在这里插入图片描述

    展开全文
  • pptp,l2tp获取登录用户信息用pppd参数即可
  • 易语言TPLINK路由器登录源码系统结构:Base64Encode, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮1_被单击 || ||------Base64Encode
  • tp 用户登录日志记录

    千次阅读 2017-05-18 14:48:17
    http://www.thinkphp.cn/code/646.html
    1. <?php
    2. // +----------------------------------------------------------------------
    3. // | PHP@妖孽 [三十年河东三十年河西,莫欺少年穷.!]
    4. // +----------------------------------------------------------------------
    5. // | Copyright (c) 2014 http://www.yaonies.com All rights reserved.
    6. // +----------------------------------------------------------------------
    7. // | Author: PHP@妖孽 <msj@yaonies.com>
    8. // +----------------------------------------------------------------------
    9. /**
    10.  +------------------------------------------------------------------------------
    11.  * 基于用户的操作记录验证类
    12.  +------------------------------------------------------------------------------
    13.  * @category   ORG
    14.  * @package  ORG
    15.  * @subpackage  Msj
    16.  * @author    PHP@妖孽 <msj@yaonies.com>
    17.  * @version   1.0
    18.  +------------------------------------------------------------------------------
    19.  */
    20. // 配置文件增加设置
    21. //  'OPERATION_ON'=>true,// 开启用户记录日志
    22. //     'OPERATION_MEMBER'=>'learn_member',
    23. //     'OPERATION_TYPE'=>'web',//分别为web,interface也就是网站,和接口
    24. //     'OPERATION_MEMBER_ID'=>'member_id', //如果后台就取session,如果接口就直接取get,post请求的值
    25. /*
    26. -- --------------------------------------------------------
    27. CREATE TABLE IF NOT EXISTS `msj_operation_log` (
    28.   `operation_log` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '操作记录主键',
    29.   `operation_uid` mediumint(4) NOT NULL DEFAULT '0' COMMENT '操作人/如果是接口返回-1暂不记录接口请求人',
    30.   `operation_node` char(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '操作节点',
    31.   `operation_ip` mediumtext COLLATE utf8_bin NOT NULL COMMENT '记录操作IP,省市,等信息',
    32.   `operation_time` int(10) NOT NULL DEFAULT '0' COMMENT '操作时间',
    33.   PRIMARY KEY (`operation_log`),
    34.   KEY `index_uid_node` (`operation_uid`,`operation_node`,`operation_log`)
    35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='@author PHP@妖孽\r\n@since 2014-5-4'
    36. */
    37. class Operation {
    38.     
    39.     private $operation_on;//操作记录开关
    40.     public    $error;//错误信息
    41.     
    42.     /**
    43.      * @todo  验证是否开启记录
    44.      */
    45.     public function __construct(){
    46.         $this->operation_on = C('OPERATION_ON');
    47.         if($this->operation_on === false){
    48.             return false;
    49.         }
    50.     }
    51.     
    52.     /**
    53.      *  @todo获取客户端IP地址
    54.      * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
    55.      * @return mixed
    56.      */
    57.     private function getClientIp($type=0){
    58.         $type       =  $type ? 1 : 0;
    59.         static $ip  =   NULL;
    60.         if ($ip !== NULL) return $ip[$type];
    61.         if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    62.             $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    63.             $pos    =   array_search('unknown',$arr);
    64.             if(false !== $pos) unset($arr[$pos]);
    65.             $ip     =   trim($arr[0]);
    66.         }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
    67.             $ip     =   $_SERVER['HTTP_CLIENT_IP'];
    68.         }elseif (isset($_SERVER['REMOTE_ADDR'])) {
    69.             $ip     =   $_SERVER['REMOTE_ADDR'];
    70.         }
    71.         // IP地址合法验证
    72.         $long = sprintf("%u",ip2long($ip));
    73.         $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    74.         return $ip[$type];
    75.     }
    76.     
    77.     /**
    78.      * @todo 检测表是否存在,如果不存在则创建新表
    79.      */
    80.     static public function checkTableIsExist(){
    81.         $db     =   Db::getInstance(C('RBAC_DB_DSN'));
    82.         $table_prefix = C('DB_PREFIX');
    83.         $sql    =   "CREATE TABLE IF NOT EXISTS `{$table_prefix}msj_operation_log` (
    84.           `operation_log` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '操作记录主键',
    85.           `operation_uid` mediumint(4) NOT NULL DEFAULT '0' COMMENT '操作人/如果是接口返回-1暂不记录接口请求人',
    86.           `operation_node` char(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '操作节点',
    87.           `operation_ip` mediumtext COLLATE utf8_bin NOT NULL COMMENT '记录操作IP,省市,等信息',
    88.           `operation_time` int(10) NOT NULL DEFAULT '0' COMMENT '操作时间',
    89.           PRIMARY KEY (`operation_log`),
    90.           KEY `index_uid_node` (`operation_uid`,`operation_node`,`operation_log`)
    91.         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='@author PHP@妖孽\r\n@since 2014-5-4'";
    92.         $db->execute($sql);
    93.     }
    94.     
    95.     /**
    96.      * @todo 写入操作日志
    97.      */
    98.     public function writeLog(){
    99.         (defined('NOW_TIME'))?$time = NOW_TIME: $time=time();
    100.                 
    101.         switch (C('OPERATION_TYPE')){
    102.             case 'web':
    103.                 $uid = session(C('OPERATION_MEMBER_ID'));
    104.                 $uid = ($uid)?$uid:0;
    105.                 break;
    106.             case 'interface'://预留
    107.                 $uid = -1;//接口的操作日志暂时不记录操作人
    108.                 break;
    109.             default:
    110.                 $uid = -2;
    111.                 break;
    112.         }
    113.         
    114.         $db_name =C('DB_NAME') ;
    115.         $table_prefix = C('DB_PREFIX');
    116.         import('@.ORG.Msj.IpLocation');// 导入IpLocation类
    117.         $Ip = new IpLocation(); // 实例化类
    118.         $ip_info = $Ip->getlocation($this->getClientIp()); // 获取某个IP地址所在的位置
    119.         $ip_info['country'] = iconv('gbk', 'utf-8', $ip_info['country']);
    120.         $db     =   Db::getInstance(C('RBAC_DB_DSN'));
    121.         $sql    =    "INSERT INTO `{$db_name}`.`{$table_prefix}msj_operation_log` (`operation_uid`, `operation_node`, `operation_ip`, `operation_time`) VALUES ('".$uid."','".$_SERVER['REQUEST_URI']."','".serialize($ip_info)."','".$time."');"; 
    122.         if($db->execute($sql) === false ){
    123.             //插入失败写日志
    124.             Log::write("uid:{$uid},".'node:'.$_SERVER['REQUEST_URI'].',operation_ip:'.serialize($ip_info).',time:'.date('Y-m-d H:i:s',$time));
    125.         }
    126.         
    127.     }
    128.     
    129.     /**
    130.      * @todo 查询操作日志
    131.      * @param array $map 目前只支持用户id的查询.
    132.      */
    133.     public function logList($map=array()){
    134.         $db     =   Db::getInstance(C('RBAC_DB_DSN'));
    135.         $member_table_name = C('OPERATION_MEMBER');
    136.         $operation_table_name =C('DB_PREFIX').'msj_operation_log';
    137.         $member_id = implode(',',$map);
    138.         $sql = "(SELECT 
    139.                   msj_operation_log.operation_log AS operation_log,
    140.                   msj_operation_log.operation_uid AS operation_uid,
    141.                   msj_operation_log.operation_node AS operation_node,
    142.                   msj_operation_log.operation_ip AS operation_ip,
    143.                   msj_operation_log.operation_time AS operation_time,
    144.                   Member.member_name AS member_name 
    145.                 FROM
    146.                   {$operation_table_name} msj_operation_log 
    147.                   JOIN {$member_table_name} Member 
    148.                     ON msj_operation_log.operation_uid = Member.member_id 
    149.                 WHERE (`member_id` IN('{$member_id}')))";
    150.         $log_list = $db->query($sql);
    151.         $Ip = new IpLocation(); // 实例化类
    152.         $ip_info = $Ip->getlocation($this->getClientIp()); // 获取某个IP地址所在的位置
    153.         if(!empty($log_list)){
    154.             foreach($log_list as $key=>$val){
    155.                 $log_list[$key]['operation_time'] = date('Y-m-d H:i:s',$val['operation_time']);
    156.                 $info = unserialize($val['operation_ip']);
    157.                 $log_list[$key]['operation_ip'] = "地区:".$info['area'].',城市:'.$info['country'].',IP:'.$info['ip'];
    158.             }
    159.             return $log_list;
    160.         }else{
    161.             return false;
    162.         }
    163.     }
    164.     
    165.     public function __destruct(){
    166.         $this->operation_on=false;
    167.         $this->error ='';
    168.     }
    169.     
    170. }
    171. //查list;
    172. import('@.ORG.Msj.Operation');
    173. $operation_obj = new Operation();
    174. $log_list  = $operation_obj->logList(array('member_id'=>2086));
    175. //记录日志
    176. $operation_obj->writeLog();
    展开全文
  • TPLINK路由器登录.rar

    2020-04-05 15:02:30
    TPLINK路由器登录.rar
  • 换了tplink无线扩展器之后发现无法登录扩展器界面了怎么办?怎么设置才可以进入到扩展器界面呢?下面就为大家介绍TP-Link扩展器的设置方法,希望对大家有帮助
  • namespace MerAdmin\Controller... //未登录 ,跳转登录页 $this->error('请登录后查看该页面',U('login/index')); } } } ![图片说明](https://img-ask.csdn.net/upload/201810/12/1539311669_738308.png)
  • tp框架获取openid并登录的demo,并且成功,分享给大家
  • 可以方便登录TPlink类型路由器管理网站,避免每次输入密码
  • TP6登录

    千次阅读 2020-11-17 00:07:44
    一.登录流程 正常:登录页面,登录成功跳转到后端页面,登录失败(密码错误or 用户不错在...未登录:用户没登录的情况下,跳回登录页面 已登录:已经登录(再次访问登录页面,sessio等有记录),直接跳转到后端页面 ...

    一.登录流程

    1. 正常:登录页面,登录成功跳转到后端页面,登录失败(密码错误or 用户不错在 or …)回到登录页面
    2. 未登录:用户没登录的情况下,跳回登录页面
    3. 已登录:已经登录(再次访问登录页面,sessio等有记录),直接跳转到后端页面
      在这里插入图片描述

    二.后端登陆-ajax登录(流程)

    js代码

    var show_num = [];
    
    layui.use(['form'], function () {
    
        var form = layui.form,
            layer = layui.layer;
        // 登录过期的时候,跳出ifram框架
        if (top.location != self.location) top.location = self.location;
        // 进行登录操作
        form.on('submit(login)', function (data) {
            data = data.field;
            if (data.username == '') {
                 layer.msg('用户名不能为空');
                 return false;
            }
            if (data.password == '') {
                 layer.msg('密码不能为空');
                 return false;
            }
    
            if (data.captcha == '') {
                 layer.msg('验证码不能为空');
                 return false;
            }
            
            $(".input-val").val('');
            //url,url,data,type等重要数据
            url ="/admin/login/check";
            $.ajax({
                url,
                data,
                type:"POST",
                success(res){
                    if(res.status == 1){
                        layer.msg('登录成功', function () {
                            window.location = '/admin/index/index';
                        });
                    }else{
                        layer.msg(res.message);
                        return false;
                    }
                }
            })
            return false;
        });
    });
    $(function(){
        // location.href  =  "http://www.baidu.com";
        draw(show_num);
        $("#canvas").on('click',function(){
            draw(show_num);
        })
    })
    

    后台index代码,模拟登录

    //模拟登录成功
    namespace app\admin\controller;
    
    use app\BaseController;
    use think\facade\View;
    class Login extends BaseController{
    	public function index(){
    		return View::fetch();
    	}
    	
    	public function check(){
    		return show(config("status.success),"登录成功");
    }
    }
    

    三,登录逻辑过程如图

    在这里插入图片描述

    在check()进行参数校验

    完成此功能需要在中间件里开启session初始化
    

    在这里插入图片描述

     public function check(){
    	//是否为post请求
    	if($this->request->isPost()){
    		return show(config("status.error"),"请求方式错误");
    	}
    	   //参数检验,
            $username = $this->request->param("username", "", "trim");
            $password = $this->request->param("password", "", "trim");
            $captcha = $this->request->param("captcha", "", "trim");
            //原生传递的值是否为空
            if (empty($username) || empty($password) || empty($captcha)) {
                return show(config("status.error"), "参数不能为空");
            }
    		//判断验证码是否为空
    		if(captcha_check($capthcha)){
    			return show(config("status.error"), "验证码不正确".$captcha);
    		}
    		return show(config("status.success"), "登陆成功");
    }
    

    获取用户信息

    1. 创建model层
    <?php
    //model
    namespace app\common\model\mysql;
    use think\model;
    class AdminUser extends Model {
        //根据用户名,获取后端表的数据
        public function getAdminUserByUsername($username){
            if(empty($username)){
                return false;
            }
            $where = [
                "username" => trim($username),
            ];
            $result = $this->where($where)->find();
            return $result;
        }
    
        //根据主键id更新数据表数据
        public function updateById($id, $data){
            $id = intval($id);
            if(empty($id) || empty($data) || !is_array($data)){
                return false;
            }
            $where = [
                "id" => $id,
            ];
            return $this->where($where)->save($data);
        }
    }
    

    需要知道config下面的status.php文件
    在这里插入图片描述

    //获取model数据
    $adminUserObj =new AdminUser();
    $adminUser = $adminUserObj->getAdminUserByUsername($username);
    //判断在数据库中,该登录用户是否存在
         //判断用户是否存在
                if(empty($adminUser) || $adminUser->status != config("status.mysql.table_normal")){
                    return show(config("status.error"), "不存在该用户");
                }
                $adminUser = $adminUser->toArray();
    
                //判断密码
                if(($adminUser['password']) != md5($password."_singwa_abc")){
                    return show(config("status.error"),"密码错误");
                }
    		
    		//将登陆信息记录到session中
    		session("adminUser",$adminuser);
    
       //要记录表的信息
                $updateData =[
                    "last_login_time" =>time(),
                    "last_login_ip" =>request()->ip(),
                    "update_time" =>time(),
                ];
            //记录信息到mysql表中,$adminUserObj模型里的
                $res = $adminUserObj->updateById($adminUser['id'],$updateData);
                if(empty($res)){
                    return show(config("status.error"),'登陆失败');
                }
    		return show(config("status.success"), "登陆成功");
        }
    

    用base方式处理登录流(别忘了配置)

    1. 新建立的方法验证登录流
    <?php
    
    namespace app\admin\controller;
    
    use app\Basecontroller;
    use think\exception\HttpResponseException;
    class AdminBase extends BaseController{
    
    	public $adminUser =null;
    	public function initialize(){
    		parent::initialize();
    		//判断是否登陆
    		if(empty($this->isLogin())){//判断是否登录切换到中间件中
    			return $this->redirect(url("login/index"),302);
    		}
    		
    	}
    	//判断是否登录具体方法
    	public function isLogin(){
    		//获取session数据
    		 $this->adminUser = session(config("admin.session_admin"));
    		 if(empty($this->adminUser)){
    		 	return false;
    		 }
    		 return true;
    	}
    
    	//定义一个新方法,返回后端页面
    	public function redirect(...$args){
    		throw new HttpResponseException(redirect(...$args));
    	}
    }
    
    1. 利用中间件判断登录流
    //中间件,Auth文件
    <?php
    declare (string_type =1);
    namespace app\admin\middleware;
    
    class Auth{
    	//中间件开始调度
    	public function handle($request, \Closure $next){
    	    //前置中间件
            if(empty(session(config("admin.session_admin"))) && !preg_match("/login/",$request->pathinfo())){
                return redirect(url((string)"login/index"));
            }
    
            $response = $next($request);
            //后置中间件,里面的有些方法会被执行,不安全或者没有意义
    //        if(empty(session(config("admin.session_admin"))) && $request->controller()!= "Login"){
    //                return redirect(url((string)"login/index"));
    //        }
    		return $next($request);
    	}
    
    	public function end(\think\Response $response){
    
    	}
    }
    

    validate验证机制

    1. 创建一个validate文件
    <?php
    namespace app\admin\validate;
    
    use think\Validate;
    
    class AdminUser extends Validate{
        protected $rule = [
          'username' =>'require',
          'password' =>'require',
          'captcha' =>'require|checkCapcha',
        ];
    
        protected $message =[
            'username' =>'用户必须存在1',
            'password' =>'密码必须存在2',
            'captcha' =>'验证码必须存在3',
        ];
    
        protected function checkCapcha($value, $url, $data =[]){
            if(!captcha_check($value)){
                return "您输入的验证码不正确啊";
            }
            return true;
        }
    }
    

    login.php文件

          //validate验证机制
            $validate = new \app\admin\validate\AdminUser();
            if(!$validate->check($data)){
                return show(config("status.error"),$validate->getError());
            }
    
    展开全文
  • tp5使用cookie加密算法,以登录为例

    千次阅读 2018-08-21 00:03:17
    其次,我们不管要对cookie加密,还要考虑到当我们使用的时候要对加密后的cookie进行解密处理,得到正确的用户名和密码后才能做自动登录一类的功能,下面看看我们的加密方案: 1:在配置文件config中添加 '...
  • 您也可以参考路由器上网设置指导视频,请点击访问:「链接」如果您需要参考迷你路由器(Mini)、3G路由器或者ADSL一体机的设置方法,请点击对应图标,参考具体设置方法:TP-LINK迷你无线路由器设置指南 - TP-LINK 服务...
  • 新版普联(TP-Link)路由器的管理员密码,是第一次设置上网时,用户...如果把管理员密码忘了,无法进入普联(TP-Link)路由器的设置页面,可以按照下面的方法来解决问题。1、先试试输入你的普联TP-Link路由器的wifi密码...
  • TP框架的登录注册

    千次阅读 2019-08-02 13:25:54
    TP框架的登录注册 1、首先进行创建一张user表,根据自己项目情况进行创建,下面一张图,是我创建的一张表 2、创建model(模型)文件, 这是user模型的代码 先进行绑定id,和表。。然后在进行时间的自动插入,这样...
  • 使用tp修改后台管理员登录用户密码

    千次阅读 2018-01-04 20:40:07
    1.在模板中输入当前登录账号的密码,2次确认后post方法提交到后端 tr> th>i class="require-red">*i>旧密码:th> td>input class="common-text" name="oldPwd" type="password">td> tr> tr> th>i class=...
  • 破解TP-LINK路由器登陆密码

    热门讨论 2011-02-08 12:13:30
    用于破解TP-LINK的登陆密码和用户名
  • 给大家讲一下TP-link路由器后台登录时,显示“密码输入次数过多,请重启路由器后再尝试登录”的原因分析以及解决办法。
  • TP5+bootstrap3登录注册

    2020-09-18 09:37:02
    该项目是用tp5+bootstrap3.0写的一个demo,仅为初学者参考学习,大牛可以绕过。内容包含登录,注册,视图模板,防止重复登录,数据模型和验证,使用了静态代理
  • tp6 登录验证

    2021-08-27 14:58:40
    中间件命令快速生成:tp6手册指引 php think make:middleware Check 1、中间件:app/middleware/Check namespace app\middleware; use think\facade\Session; class Check{ public function handle($request, ...
  • tp判断是否登录

    2021-05-24 00:13:19
    在这里插入代码片 <?...namespace app\admin\controller; use think\Controller; class Base extends Controller ... public function _initialize(){ ...error('请先登录系统!','Login/index'); } } } ...
  • 新版tplink路由器怎么修改管理员密码(登录密码)?下文小编就为大家详细介绍修改新版tplink路由器管理员密码的方法,一起看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,165
精华内容 8,466
关键字:

tp登录