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 flush类输出缓冲剖析
Oct 19 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
PHP在线书签系统分享
Jan 04 PHP
Symfony的安装和配置方法
Mar 17 PHP
PHP中串行化用法示例
Nov 16 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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 EOT定界符的使用详解
2008/09/30 PHP
PHP 高级课程笔记 面向对象
2009/06/21 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
使用python实现knn算法
2017/12/20 Python
vue常用指令代码实例总结
2020/03/16 Python
python中append函数用法讲解
2020/12/11 Python
python中os.remove()用法及注意事项
2021/01/31 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
如何定义一个可复用的服务
2014/09/30 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
函授大专自我鉴定
2013/11/01 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书
房地产融资计划书
2014/01/10 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
数据库连接池
2021/04/06 MySQL
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
python获取字符串中的email
2022/03/31 Python