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 smarty函数扩展
Mar 15 PHP
PHP日期处理函数 整型日期格式
Jan 12 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
php对象工厂类完整示例
Aug 09 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 PHP
php测试kafka项目示例
Feb 06 PHP
PHP实现简单注册登录系统
Dec 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数组的使用方法小结
2010/09/23 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php跨站攻击实例分析
2014/10/28 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
Laravel实现表单提交
2017/05/07 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
Python深入06——python的内存管理详解
2016/12/07 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
顺丰快递Java软件工程师面试题
2015/07/31 面试题
事业单位竞聘上岗实施方案
2014/03/28 职场文书
故意伤害辩护词
2015/05/21 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
python基础之停用词过滤详解
2021/04/21 Python
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
Go timer如何调度
2021/06/09 Golang