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开发工具之vs2005图解
Jan 12 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
PHP安全防范技巧分享
Nov 03 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
四个PHP非常实用的功能
Sep 29 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
php基于自定义函数记录log日志方法
Jul 21 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/13 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
什么是Rollback Segment
2013/04/22 面试题
经典毕业生求职信
2014/07/12 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
发布会邀请函
2015/01/31 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
2015年科普工作总结
2015/07/23 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Flask response响应的具体使用
2021/07/15 Python