基于ThinkPHP3.23的简单ajax登陆案例
本文将给小伙伴们做一个基于ThinkPHP3.2.的简单ajax登陆demo。闲话不多说。直接进入正文吧。
可能有些小伙伴认为TP自带的跳转页面挺好,但是站在网站安全的角度来说,我们不应该让会员看到任何错误信息,或者可以暴露网站服务端信息的内容。TP的那个跳转页面太经典了。稍微了解框架的人看到那个页面,就知道你的网站是基于哪个框架构建的了。然后就对症下药开始找你站上的漏洞了。
在TP官网的讨论区看到不少小伙伴在使用TP3.2的ajax的时候遇到各种小问题,尝试着回答了几个,但是力不从心,发帖的人实在是有点多,所以呢,就简单的写一个demo吧。希望对小伙伴们有帮助。
这里,我们以TP3.23完整版为例,只修改'URL_MODE'为重写模式(完全是个人习惯,勿喷
),其他的保持默认即可。
第一步:我们先创建一个控制器:LoginController.class.PHP并定义视图。
namespace Home\Controller;
use Think\Controller; class LoginController extends Controller{ public function index(){ $this->display();
}
}
第二步:创建视图文件View/Login/index.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax登陆演示</title>
<script src="http://cdn.bootcss.com/jquery/1.10.1/jquery.min.js"></script>
</head>
<body>
<<fieldset>
<legend>登陆演示表单</legend>
<input type="text" name="uname" id="uname"><br>
<input type="password" name="upwd" id="upwd"><br>
<input type="submit" value="登陆" id="checkLogin">
</fieldset>
</body>
</html>
不知道大家注意到没有,我并没有写<form>标签,由于我们是ajax提交,所以这里的<form>标签留空,提交地址可以通过JavaScript指定。
第三步:接下来我们需要通过js做一个简单的表单验证,然后通过ajax提交到指定的url地址,并且通过接收返回来的值而执行不同的操作,具体代码如下,必要的地方我都有注释哦。
<script type="text/javascript">
$(function(){
$('#checkLogin').click(function(){
var $unameVal = $.trim($('#uname').val());
var $upwdVal = $.trim($('#upwd').val());
//如果没有填写数据,则直接返回false.不执行ajax提交操作
if($unameVal == '' || $upwdVal == ''){
alert('请输入用户民和密码');
return false;
}
/*
$.post(url,parameters,callback);
url : post提交的服务器端资源地址。
parameters: 需要传递到服务器端的参数。 参数形式为“键/值”。
callback : 在请求完成时被调用,这里我们通过$data来接收服务器返回的数据
*/
$.post('{:U('Login/checkLogin')}', {uname : $unameVal,upwd : $upwdVal},function($data) {
alert($data.info);
if($data.status == ){
location.href = $data.url;
}else{
$('#uname').reset();
$('#upwd').reset();
}
});
});
});
</script>
第四步:我们在LoginController.class.php中定义一个方法checkLogin()方法用来处理post过来的数据,并返回。
/*
* @param $uname string 接收到的用户名
* @param $upwd string 接收到的密码
* @return $data array 验证结果
* @author uctoo<uctoo@foxmail.com>
*/
public function checkLogin($uname,$upwd){
$data = array();
if(!empty($uname) && !empty($upwd)){
//1.这里的业务逻辑,小伙伴们自由发挥.我呢就简单的处理一下.只要接收到数据不为空,就表示成功.
//2.如果你觉得拼装数组比较麻烦,那么你可以将$this->success()或者$this->error中的第三个参数定义为true,即可返回json数据.例如:$this->success('登陆成功',U('User/index'),true).
//3.我个人倾向于拼装数组,主要原因是自己拼装的数组数据结构比较明了,方便阅读.
$data['status'] = ;
$data['info'] = '登陆成功';
$data['url'] = U('User/index');
}else{
$data['status'] = ;
$data['info'] = '用户名和密码不能为空';
$data['url'] = U('Login/index');
}
//通过ajaxReturn()方法返回我们之前生成的数组
$this->ajaxReturn($data);
}
附效果图一张:
基于ThinkPHP3.23的简单ajax登陆案例的更多相关文章
- 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行
[微信支付]分享一个失败的案例 2018-06-04 08:24 by stoneniqiu, 2744 阅读, 29 评论, 收藏, 编辑 这个项目是去年做的,开始客户还在推广,几个月后发现服务器已 ...
- 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 基于PHP实现一个简单的在线聊天功能(轮询ajax )
基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...
- 基于Zookeeper的分步式队列系统集成案例
基于Zookeeper的分步式队列系统集成案例 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, ...
- 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限
基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...
- (一)熟悉执行流程——基于ThinkPHP3.2的内容管理框架OneThink学习
ThinkPHP作为国内具有代表性的PHP框架,经过多年的发展,受到越来越多公司与开发者的青睐.我也在忙里偷闲中抽出部分时间,来学习这个优秀的框架.在开始学习这个框架时,最好通过实例来学习,更容易结合 ...
- jQuery中的ajax用法案例
什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载 ...
- Ajax登陆,使用Spring Security缓存跳转到登陆前的链接
Spring Security缓存的应用之登陆后跳转到登录前源地址 什么意思? 用户访问网站,打开了一个链接:(origin url)起源链接 请求发送给服务器,服务器判断用户请求了受保护的资源. 由 ...
随机推荐
- 第三百九十一节,Django+Xadmin打造上线标准的在线教育平台—404,403,500页面配置
第三百九十一节,Django+Xadmin打造上线标准的在线教育平台—404,403,500页面配置 路由映射在全局也就是根目录里的urls.py里配置404路由映射 注意:不是写在urlpatter ...
- 又看了半天的pdf格式的js方面的书,感觉受益匪浅啊,只会一点操作的我,要学好理论
又看了半天的pdf格式的js方面的书,感觉受益匪浅啊,只会一点操作的我,要学好理论
- Process和Thread在指定CPU运行
最近帮朋友写了一个多线程程序,他那边一运行多线程就出错,我这边却没有任何问题,找了好久才找到解决方法,原来是CPU的问题,有朋友遇到同样的问题,可以一起参考 //进程与指定cpu绑定 SetProce ...
- python 程序构架浅析
定义:通常的 Python 程序的构架是指:将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法. python的程序构架可表示为: 一个python程序就是一个模块的系统.它有一个顶层文件 ...
- Fedora更改密码
开机进入单用户模式 按e --->进入编辑界面之后,在“rhgb quiet”字符前面,输入“single”加空格,回车-->返回上一步中启动命令行菜单. 按 b ---> pas ...
- WWDC 2015大会到来了
WWDC 2015大会到来了,观看到凌晨3点,困死了. 从现场直播视频可以看到: (1)iOS 9的新体验:Siri更智能.Search更全面.苹果支付更方便.Notes和News更新颖好用.地图应用 ...
- JS判断设备类型跳转至PC端或移动端相应页面
if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobil ...
- [转载]Android 生成keystore,两种方式
Refer : http://blog.csdn.net/ms03001620/article/details/8490314 一.eclipse 中生成android keystore 建立任意一个 ...
- 配置nginx.config 报错:connect() failed (111: Connection refused) while connecting to upstream解决
php-fpm没有运行 执行如下命令查看是否启动了php-fpm,如果没有则启动你的php-fpm即可 查看: netstat -ant | grep 9000 执行 /usr/local/php/s ...
- memcache和redis的区别
1.定义 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API Memcache是一个高性能的分布式的内存对象缓存系 ...