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 相关文章推荐
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php 中英文语言转换类
Sep 07 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
小谈php正则提取图片地址
Mar 27 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
如何让CI框架支持service层
Oct 29 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php&amp;mysql 日期操作小记
2012/02/27 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
Javascript Select操作大集合
2009/05/26 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Javascript原生ajax请求代码实例
2020/02/20 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
django中的HTML控件及参数传递方法
2018/03/20 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
航空大学应届生求职信
2013/11/10 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
材料员岗位职责范本
2015/04/11 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python