yii框架用户登录实例

1、数据库表创建-user

序号

字段名称

类型

名称

属性

默认值-说明

1

user_id

int(10)

 

pk

自动编号

2

username

varchar(64)

用户名

uniq

 

3

nickname

varchar(64)

昵称

  

4

password

varchar(32)

密码

  

 

2、登陆控制器 - controllers/LoginController.php

 

<?php
/**
 * 用户登陆
 *
 * @author Ttall <ttall.su@gmail.com>
 * @link http://www.ttall.net/
 * @copyright Copyright © 2012-2015 ttall.net
 * @license http://www.ttall.net/license/
 */
class LoginController extends Controller {
	// 用户登陆
public function actionIndex() {
	$username = '';
	if ($_POST['submit-login']) {
	$user = new User();
	$errorMsg = '';
	$username = isset($_POST['username']) ? trim($_POST['username']) : '';
	$password = isset($_POST['password']) ? trim($_POST['password']) : '';
	if ($username && $password) {
		$attributes = array('username' => $username);
		user = User::model() -> findByAttributes($attributes);
		if ($user) {
			$userpasswd = md5($password );
			$loginErrorTimes=(int)Yii::app()->session['login_error_times'];
			if ($loginErrorTimes > 0) {
				$loginErrorTimes++;
			} else {
				$loginErrorTimes = 1;
			}
			// 错误大于3次,需要输入验证码。
			if ($loginErrorTimes >= 3) {
				$verifyCode=isset($_POST['verify_code'])?trim($_POST['verify_code']) : '';
				$captcha = Yii::app() -> session['captcha'];
				if (strtolower($captcha) != strtolower($verifyCode)) {
					//$this -> assign('errorMsg', '验证码错误!');
					$errorMsg = '验证码错误!';
				}
				$this -> assign('login_error_times', $loginErrorTimes);
			}
			// 登陆次数,提交超过三次需要输入验证码
			Yii::app() -> session['login_error_times'] = $loginErrorTimes;

			if (empty($errorMsg)) {
				if ($userpasswd != $user -> password) {
				// 登陆错误次数
				//$this -> assign('errorMsg', '密码错误!');
					errorMsg = '密码错误!';
				} else {
				// 登陆成功,
					Yii::app()->session['username']=$user['username'];
					Yii::app() -> session['nickname'] = $user['nickname'];
					Yii::app() -> session['user_id'] = $user['user_id'];
					Yii::app() -> session['is_login'] = TRUE;
					Yii::app() -> session['visitor'] = $user;
				// 更新用户记录:登陆时间,最近一次IP,登陆次数等
					$user -> last_login = time();
					$user -> last_ip = $this -> getIp();
					$user -> login_times = $user -> login_times + 1;
					$user -> last_login = time();
					$user -> save();
				// 重置登陆错误次数
					Yii::app() -> session['login_error_times'] = null;
					$this -> redirect("/index.php?r=ucenter/default");
					return;
				}
			}
		} else {
			$errorMsg = '用户名不存在!';
		}
	} else if (empty($username)) {
		$errorMsg = '用户名不可以为空!';
	} else if (empty($password)) {
		$errorMsg = '密码不可以为空!';
	}
}
	$this -> assign('errorMsg', $errorMsg);
	$this -> assign('username', $username);
	$this -> display('login.html');
}
// 配置类
public function actions() {
	// return external action classes, e.g.:
	return array();
}
}

 

3、模型 - models/User.php

 

<?php
/**
 * 用户模型
 * models/User.php
 *
 * @author Ttall <ttall.su@gmail.com>
 * @link http://www.ttall.net/
 * @copyright Copyright © 2012-2015 ttall.net
 * @license http://www.ttall.net/license/
 */class User extends CActiveRecord {
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Users the static model class
	 */
	public static function model($className = __CLASS__) {
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName() {
		return '{{user}}';
	}
	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules() {
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array( array('password', 'required'), array('username, password', 'length', 'max' => 32), array('created', 'safe'),
		// The following rule is used by search().
		// Please remove those attributes that should not be searched.
		array('user_id, username, password, created', 'safe', 'on' => 'search'), );
	}

	/**
	 * @return array relational rules.
	 */
	public function relations() {
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'newscomment' => array(self::HAS_MANY, 'NewsComment', 'user_id'), 
			'myMessage' => array(self::HAS_MANY, 'Message', 'receiver_uid'),
			'sendMessage' => array(self::HAS_MANY, 'Message', 'sender_uid'),
		);
	}

 

4、模型 - views/login.html

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta charset=utf-8 />
	<title>登陆 - <!--{$site_name}--> - <!--{$domain}--></title>
	<link href="/static/css/base.css" rel="stylesheet" type="text/css" />
	<link href="/static/css/main.css" rel="stylesheet" type="text/css" />
	<script type="text/javascript" src="/static/js/jquery.min.js"></script>
	<script type="text/JavaScript" src="/static/js/curvycorners.js"></script>
	<script type="text/JavaScript" src="/static/js/common.js"></script>
</head>

<body>
	<!--header-->
	<!--{include file="header.html"}-->
	<!--/header-->
	<div class="wrap login_container">
	<form action="" method="post">
		<h2 class="login_title">登 录</h2>
		<div class="login_le">
			<p class="login_le_title">使用师说网帐号登录:</p>
			<p class="error_p">
			<span class="login_le_text"> </span>
				<!--{if $errorMsg}-->
				<span class="error"> <em><!--{$errorMsg}--></em> </span>
				<!--{/if}-->
			</p>
			<p>
			<span class="login_le_text">邮箱:</span>
				<input name="username" type="text" class="login_input" value="<!--{$username}-->"/>
			</p>
			<p>
				<span class="login_le_text">密 码:</span>
				<input name="password" type="password" class="login_input" value="123456"/>
			</p>

			<!--{if $login_error_times}-->
			<p>
				<span class="yzm_info"> <img src="/index.php?r=login/captcha&v=<!--{$login_error_times}-->" id="captcha" class="" /> <a href="#captcha" id="changeCaptcha">看不清,换一张图片</a></span>
				<!--{if $verifyCodeErrorMsg}-->
				<span class="error"> <em><!--{$verifyCodeErrorMsg}--></em> </span>
				<!--{/if}-->
			</p>
			<p>
				<span class="login_le_text">验证码:</span>
				<input name="verify_code" type="text" class="login_input" style="width: 52px;"/>
			</p>
			<!--{/if}-->
			<p>
				<span class="login_le_text"> </span>
				<input name="remember_me" type="checkbox" value="" />
				<span class="f12px"> 下次自动登录 <a href="" target="_blank" title="" class="forget_password">忘记密码?</a> </span>
			</p>
			<p>
				<span class="login_le_text"> </span>
				<input name="submit-login" type="submit" value="登录" class="login_commit" />
			</p>
		</div>
		<div class="login_ri">
			<p class="login_le_title">您还可以用以下帐号登录:</p>
			<p>
				<a href="" class="login_commit_btn1"></a>
			</p>
		</div>
	</form>
</div>
<!--//footer-->
<!--{include file="footer.html"}-->
<!--//footer-->
<script type="text/javascript">
	// 验证码修改
	$("#changeCaptcha").click(function() {
	var src = "/index.php?r=login/captcha&rand=regist" + "&x=" + Math.floor((Math.random() * 100) + 1);
	$('#captcha').attr("src", src);
		return false;
	})
</script>
</body>
</html>

来源:http://www.yiibai.com/yii/yii_login.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值