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>
相关推荐
资源名称:PHP YII框架实战项目实例视频教程 教程内容: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
### Yii框架入门实例知识点详解 #### 一、Yii框架简介及优势 - **灵活适应业务需求**:Yii框架因其高度可定制性和丰富的扩展性,能够快速响应不同业务场景的变化,适用于构建各种规模的应用。 - **统一编码习惯**...
### PHP Yii框架开发实例知识点详解 #### 一、部署Yii环境 **1.1 配置基础环境** - **PHP开发环境**: 在开始使用Yii框架之前,首先要确保PHP开发环境已经搭建完毕。一个典型的PHP开发环境包括Apache作为Web服务器...
**Yii框架中文手册** ...这个中文手册是开发者了解和掌握Yii框架的重要资源,它提供了...在实际开发中,不断查阅并理解Yii中文手册,结合实例操作,将理论知识转化为实践经验,将有助于提升开发者在Yii框架下的编程技能。
Yii框架的核心组件还包括响应(`CResponse`)、用户会话(`CWebSession`)、缓存(`CCache`)、数据库访问(`CDbConnection`)等。这些组件通过依赖注入(Dependency Injection)和组件注册(Component ...
本视频教程“YII框架实例视频后盾网马振宇”旨在帮助开发者掌握YII2框架的基本用法,并通过实际案例——博客系统的开发,加深对YII2框架的理解。无论是对于初学者还是有一定经验的开发者来说,都是一份非常有价值的...
在这个“yii示例-下拉框-最新的yii框架”中,我们将探讨如何在Yii2框架中实现下拉框功能。 1. **安装Yii框架** 在开始创建下拉框之前,你需要确保已经安装了最新版本的Yii框架。这通常通过Composer完成,运行`...
1. **组件**:Yii框架提供了一系列预定义的组件,例如用户认证、缓存、会话管理等,这些组件都是以对象的形式存在,并且可以单独配置。 2. **事件**:事件是Yii框架中的一个核心概念,它允许开发者在框架内部或者...
在Yii框架的开发过程中,用户登录后session丢失是一个比较常见的问题,这通常会导致用户在登录后被立即重定向回登录页面或者无法正确加载登录后的页面内容。以下详细介绍Yii框架中用户登录后session丢失问题的解决...
在“yii2医疗实例”中,我们可以深入理解如何将Yii2框架应用于医疗行业的实际项目开发中。这个实例可能包含了用户管理、病历记录、药品管理、预约系统等多个模块,为开发者提供了一个可扩展和可定制的平台。 首先,...
- **加载Yii框架**:确保Yii的核心功能可以被应用实例使用。 - **传递用户请求**:将HTTP请求(包括路由和GET/POST数据)转发给适当的控制器进行处理。 一个标准的入口脚本示例如下所示: ```php // 指定Yii框架...
- Yii框架的目标是实现业务逻辑与用户界面的分离,提高代码的可维护性和扩展性。在Yii中,业务逻辑由模型(Model)处理,用户界面由视图(View)渲染,而控制器(Controller)则负责处理用户输入和模型、视图之间的...
对于使用 Yii 框架的开发者来说,及时更新框架并采取额外的安全措施至关重要,例如限制不受信任的数据源,以及在可能的情况下避免反序列化用户输入。 总之,Yii 框架的这个反序列化 RCE 漏洞是一个严重的安全问题,...
在本篇中,我们将重点讨论Yii框架中的用户登录流程。该流程涉及到多个核心概念和技术点,包括会话管理(session)、Cookie机制以及用户身份验证等。通过了解Yii框架如何实现这些功能,可以帮助开发者更好地理解和利用...
8. 性能优化:Yii框架具有高效的性能,通过预编译和运行时优化,减少不必要的运算,提高了运行效率。此外,Yii还支持YII_DEBUG环境变量,便于开发者在开发阶段调试代码。 9. 组件化设计:Yii的组件化设计使得开发者...
应用组件是Yii框架中的一个重要概念,它是封装好的服务对象,可以被应用中的任何地方调用以完成特定功能。 在Yii框架中,所有的应用组件都被注册在一个全局的服务定位器中,通常使用\Yii::$app来访问。每个组件都...
Yii框架提供了一套丰富的组件和类库,使得开发者可以更加高效地处理数据访问层(DAL)的复杂任务。本文将详细探讨Yii框架中数据访问对象(DAO)的使用,以及Active Record模式和关联Active Record的添删改查操作,...
首先,让我们了解一下Yii框架。Yii是一个高性能的、基于组件的PHP框架,适用于开发Web 2.0应用。它提供了一系列强大的特性,如MVC(模型-视图-控制器)架构、缓存管理、数据库访问优化、身份验证和权限控制等,使得...
Yii商城源码是基于Yii框架构建的一个电子商务平台,提供了完整的购物流程、商品管理、订单处理、用户系统等功能。数据库文件则是用于存储和检索商城系统中的所有数据,如商品信息、用户信息、订单状态等。 首先,...