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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
如何去掉文章里的 html 语法
Oct 09 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php正则表达式(regar expression)
Sep 10 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 PHP
destoon找回管理员密码的方法
Jun 21 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
临床护士自荐信
2014/01/31 职场文书
求职自荐信怎么写
2014/03/06 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
Golang jwt身份认证
2022/04/20 Golang