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 相关文章推荐
php,不用COM,生成excel文件
Oct 09 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
PHP魔术方法的使用示例
Jun 23 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
PHP const定义常量及global定义全局常量实例解析
May 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
PHP动态图像的创建
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
php strftime函数的详细用法
2018/06/21 PHP
详解php用static方法的原因
2018/09/12 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
python解析xml简单示例
2019/06/21 Python
python mysql中in参数化说明
2020/06/05 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
大学新闻系应届生求职信
2014/06/02 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
商标侵权律师函
2015/05/27 职场文书
教育教学工作反思
2016/02/24 职场文书
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers