yii2.0框架使用 beforeAction 防非法登陆的方法分析


Posted in PHP onSeptember 11, 2019

本文实例讲述了yii2.0框架使用 beforeAction 防非法登陆的方法。分享给大家供大家参考,具体如下:

beforeAction基本原理:

对比

1、执行顺序

init > beforeAction

2、调用子函数时,两个函数都不会再次执行

3、返回值

init返回false继续执行,beforeAction停止执行

4、执行EXIT,全部停止

从框架的示例代码来看,init用于初始化数据,beforeAction用户事件的处理

代码

// 登录统一验证
public function beforeAction( $action ){
//  验证是否登录
   $is_login = $this->checkLoginStatus();
    if (in_array($action->getUniqueId(), $this->allowAllAction ) ) {
      return true;
    }
// 是否已经登录了 没有登录的话 判断登录方式
    if(!$is_login) {
//  如果是ajax方式进行请求
      if ( \Yii::$app->request->isAjax) {
        $this->renderJSON([], "未登录,请返回用户中心", -302);
      } else {
        $this->redirect( UrlService::buildWebUrl("/user/login") );
      }
      return false;
    }
}

其他的控制器使用的时候进行继承一下就可以了!

class UserController extends BaseWebController

防非法登陆的方法:

首先写一个公共控制器 让其他所以需要防止非法登陆的页面继承一下这个公共控制器

<?php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
class PublicController extends Controller{
 public function beforeAction($action){
  $cookie = \Yii::$app->request->cookies;
  //取出存入的cookie值 括号里写自己定义的cookie名字
  $user_cookie = $cookie->get('user_id');
  //判断是否有cookie
  if(!isset($user_cookie)){
   echo "<script>alert('请先登录');location.href='?r=login/login'</script>";
  }
  return parent::beforeAction($action);
 }
}

然后在任意一个控制器中加入一段代码 不需要所有控制器都写 只写一个控制器里面就行

public function beforeAction($action)
{
  if(!parent::beforeAction($action))
  {
   return false;
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
Laravel框架验证码类用法实例分析
Sep 11 #PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 #PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 #PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 #PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 #PHP
PHP 模拟登陆功能实例详解
Sep 10 #PHP
Yii框架日志操作图文与实例详解
Sep 09 #PHP
You might like
JAVA/JSP学习系列之七
2006/10/09 PHP
用mysql内存表来代替php session的类
2009/02/01 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
javascript基本语法
2016/05/31 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
python logging添加filter教程
2019/12/24 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
2014年小班元旦活动方案
2014/02/16 职场文书
进步之星获奖感言
2014/02/22 职场文书
护士感人事迹
2014/05/01 职场文书
警察群众路线整改措施
2014/09/26 职场文书
退休教师追悼词
2015/06/23 职场文书
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL