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 相关文章推荐
提问的智慧
Oct 09 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
PHP中Date()时间日期函数的使用方法小结
Apr 20 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php需登录的文件上传管理系统
Mar 21 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
PHP邮件群发机实现代码
Feb 16 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php取出数组单个值的方法
Mar 12 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
用缓存实现静态页面的测试
2006/12/06 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
最短的IE判断代码
2011/03/13 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
介绍Python中的一些高级编程技巧
2015/04/02 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
Python 字典中的所有方法及用法
2020/06/10 Python
班级入场式解说词
2014/02/01 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
办公室岗位职责
2015/02/04 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
使用Python解决图表与画布的间距问题
2022/04/11 Python