yii登陆代码和添加日志记录代码

1.后台用户数据表

DROP TABLE IF EXISTS `adminuser`;
CREATE TABLE `adminuser` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  `logtime` int(11) DEFAULT NULL,
  `logip` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

2.记录数据表

DROP TABLE IF EXISTS `journal`;
CREATE TABLE `journal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(100) DEFAULT NULL COMMENT '用户',
  `operation` varchar(100) DEFAULT NULL COMMENT '操作',
  `logtime` varchar(11) DEFAULT NULL COMMENT '操作时间',
  `logip` varchar(20) DEFAULT NULL COMMENT '操作ip',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

3.登陆模型代码

<?php 
	namespace backend\models;
	
	use Yii;
	use yii\base\Model;
	use yii\db\ActiveRecord;
	class Adminuser extends ActiveRecord{
		public $username;
		public $password;
		public $verifyCode;
		private $_user;
		public function rules(){
			return [
				['username','required','message'=>'用户名不能为空','on'=>['login']],
				['password','required','message'=>'密码不能为空','on'=>['login']],
				['username','isusername','on'=>['login']],
				['password','ispassword','on'=>['login']],
				['verifyCode', 'captcha','message'=>'验证码输入错误','on'=>['login']],
			];
		}
		// 验证用户名
		public function isusername(){
			if(!$this->hasErrors()){
				$data=self::find()->where('username=:username',[':username'=>$this->username])->one();
				//$data=self::find()->where('user=:user and pass=:pass',[":user"=>$this->user,":pass"=>md5($this->pass)])->one();
				if(is_null($data)){
					$this->addError('username','无此用户');
				}
			}
		}
		// 验证密码
		public function ispassword(){
			if(!$this->hasErrors()){
				$data=self::find()->where('password=:password',[":password"=>md5($this->password)])->one();
				if(is_null($data)){
					$this->addError('password','密码错误');
				}
			}
		}
		public function login($data)
		{
			// 指定验证场景
			$this->scenario='login';
			if ($this->load($data) && $this->validate()) {
				// 定义缓存的时间
				$lifetime=24*3600;
				$session=Yii::$app->session;
				// 设置session的过期时间
				$session['timeout']=$lifetime;
				$session['admin']=[
					'admin_user'=>$this->username,
					'islogin'=>1
				];
				// 登录成功后记录登录的时间和登录的ip
				$this->updateAll(['logtime'=>time(), 'logip'=>Yii::$app->request->userIP], 'username=:username',[':username'=>$this->username]);
				return 1;
			} else {
				return 0;
			}
		}
	}
?>

4.登陆控制器代码

<?php
namespace backend\controllers;

use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use yii\helpers\Url;
use backend\models\Adminuser;

use common\controllers\Logs;
/**
 * Site controller
 */
class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */
    /**
     * {@inheritdoc}
     */
	public function actions()
	{
	  return [
	    'error' => [
	      'class' => 'yii\web\ErrorAction',
	    ],
	    //验证码
	    'captcha' => [
	      'class' => 'yii\captcha\CaptchaAction',
	      'backColor'=>0xffffff,//背景颜色
	      'maxLength' => 6, //最大显示个数
	      'minLength' => 5,//最少显示个数
	      'padding' => 2,//间距
	      'height'=>34,//高度
	      'width' => 146,  //宽度
	      'foreColor'=>0x000000,     //字体颜色
	      'offset'=>4,        //设置字符偏移量 有效果
	    ],
	  ];
	}
    /**
     * Displays homepage.
     *
     * @return string
     */
    public function actionIndex()
    {
        return $this->render('index');
    }
    /**
     * Login action.
     *
     * @return string
     */
    public function actionLogin()
    {	
		$this->layout = false;
		$model=new Adminuser();
		if (Yii::$app->session['admin']['admin_user']) {
		    return $this->goHome();
		}
		
		// $model = new LoginForm();
		if (Yii::$app->request->isPost) {
			$post=Yii::$app->request->post();
			$res=$model->login($post);
			if($res){
				Logs::add(Yii::$app->session['admin']['admin_user'],'登陆后台',Yii::$app->request->userIP);
				return $this->redirect(Url::to(['index/index']));
			}else{
				$model->password = '';
				return $this->render('login', [
				    'model' => $model,
				]);
			}
		   
		} else {
		    $model->password = '';
		    return $this->render('login', [
		        'model' => $model,
		    ]);
		}
    }

    /**
     * Logout action.
     *
     * @return string
     */
    public function actionLogout()
    {
        // 清空session
        Yii::$app->session->removeAll();
        // 判断session是否清空
        if(!isset(Yii::$app->session['admin']['admin_user'])){
        	$this->redirect(['site/login']);
        	Yii::$app->end();
        }
        // 从那个页面过来,返回到那个页面
        $this->goback();

        //return $this->goHome();
    }
}

5.视图代码

<?php 
	use yii\helpers\Url;
	use yii\widgets\ActiveForm; 
	use backend\assets\AppAsset;
	use yii\helpers\Html;
	use yii\captcha\Captcha;
	$this->registerJsFile('/backend/web/log/js/jquery.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/js/bootstrap.min.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/js/swiper.min.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/js/main.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/js/wow.min.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/js/mdui.min.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerJsFile('/backend/web/log/layer/layer.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	
	$this->registerCssFile('/backend/web/log/css/bootstrap.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/css/main.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/css/swiper.min.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/css/font-awesome.min.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/css/animate.min.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/css/mdui.min.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	$this->registerCssFile('/backend/web/log/layer/mobile/need/layer.css', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);
	
	
	AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<?php $this->registerCsrfMetaTags() ?>
		<title>后台登陆</title>
		<?php $this->head() ?>
		<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
		<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
		<!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
	</head>
	<body>
		<?php $this->beginBody() ?>
		<div class="log" style="background: url(/backend/web/log/img/login-bg.jpg);background-position: center;background-repeat: no-repeat;background-size: cover;">
			<div class="con_log">
				<div class="main">
					<div class="main_left">
						<div class="tit">登陆</div>
						<?php 
							$form=ActiveForm::begin([
								'options'=>[
									'style'=>['width'=>'400px']
								],
								'fieldConfig'=>[
									'template'=>'{input}'
								]
							]);
						?>
							<div class="form-group">
								<?=$form->field($model,'username')->textInput(['class'=>'form-control col-md-12','id'=>'inputSuccess1','placeholder'=>'用户名'])?>
							</div>
							<div class="form-group">
								<?=$form->field($model,'password')->passwordInput(['class'=>'form-control col-md-12','id'=>'inputSuccess2','placeholder'=>'密码'])?>
							</div>
							<div class="form-group form_con">
							  <!-- <input type="text" class="form-control col-md-12" id="inputSuccess3" aria-describedby="helpBlock2" placeholder="验证码"> -->
							  <!-- <div class="code"> -->
								<?= $form->field($model, 'verifyCode')->widget('yii\captcha\Captcha', [
									'captchaAction'=>'site/captcha',
									'options' => [
										'placeholder' => '输入验证码',
									],
									'template' => '<div class="row"><div class="col-lg-6">{input}</div><div style="margin-left:40px;margin-top:10px;" class="col-lg-3">{image}</div></div>',
								])?>
							  <!-- </div> -->
							</div>
							<div class="form-group">
							  <input type="submit" class="btn btn-default btn-info" onclick="return fun()" value="登陆">
							</div>
						<?php 
							ActiveForm::end();
						?>
					</div>
					
				</div>
			</div>
		</div>
		
		<?php $this->beginBlock('script') ?>
			function fun(){
				$name=$('#inputSuccess1').val();
				$pass=$('#inputSuccess2').val();
				$code=$('#inputSuccess3').val();
				if($name==''){
					layer.msg('请填写用户名', {icon: 0});
					$('#inputSuccess1').focus();
					return false;
				}
				if($pass==''){
					layer.msg('请填写密码',{icon:0});
					$('#inputSuccess2').focus();
					return false;
				}
				if($code==''){
					layer.msg('请填写验证码',{icon:0});
					$('#inputSuccess3').focus();
					return false;
				}
			}
		<?php $this->endBlock() ?>
		<?php $this->registerJs($this->blocks['script'], \yii\web\View::POS_END); ?>
		<?php $this->endBody() ?>
	</body>
</html>
<?php $this->endPage() ?>

6.添加记录模型

<?php 
	namespace common\models;
	
	use Yii;
	use yii\base\Model;
	use yii\db\ActiveRecord;
	
	class LogForm extends ActiveRecord{
		// public $user;
		// public $operation;
		// public $logip;
		// public $logtime;
		public static function tableName(){
			return 'journal';
		}
		public function rules()
		{
		    return [
		        [['user', 'operation', 'logip', 'logtime'], 'required', 'message'=>'{attribute}不能为空'],
		    ];
		}
	}
?>

7.添加记录控制器

<?php 
	namespace common\controllers;
	
	use Yii;
	use yii\web\Controller;
	use common\models\LogForm;
	
	class Logs extends Controller{
		//我们是静态调用所以要加static
		public static function add($user='无',$operation='无',$logip='无'){
			$logtime=time();
			$model=new LogForm();
			$model->user=$user;
			$model->operation=$operation;
			$model->logip=$logip;
			$model->logtime=$logtime;
			
			$model->save();
		}
	}
?>

8.调用日志记录方法

//引入
use common\controllers\Logs;

//调用
Logs::add(Yii::$app->session['admin']['admin_user'],'登陆后台',Yii::$app->request->userIP);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原克技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值