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>