ThinkPHP中的create方法与自动令牌验证实例教程


Posted in PHP onAugust 22, 2014

本文实例形式展示了ThinkPHP中的create方法与自动令牌验证的实现方法,具体步骤如下:

一、数据表结构

user表结构如下:

id username password

二、view模板部分

\aoli\Home\Tpl\default\User\create.html页面如下:

<form action="__URL__/addit" method="post">
 <input type="text" name="id" />
 <input type="text" name="username" />
 <input type="password" name="password" />
 <input type="submit" name="sub" value="提交" />
</form>

三、action部分:

\aoli\Home\Lib\Action.php页面如下:

<?php
 class UserAction extends Action {
  function create(){
     $this->display();   
   }
   
   function addit(){
     //向表user中添加表单内容
     $user=M('user');
     $user->create();
     $user->add();
     //判断是否存在令牌验证
     if(!$user->autoCheckToken($_POST)){
       dump('no'); 
     }else{
       dump('yes');   
     }
 }
?>

1、在对表单提交过来的数据进行操作之前,我们往往需要手动创建需要的数据,例如上面提交的表单数据:

//实例化User模型
  $user=M('user');
 
 //获取表单的POST数据
  $data['username']=$_POST['username']
  $data['password']=$_POST['password']
 
 //写入到数据库
   $user->data($data)->add();

  附:使用data方法创建的数据对象不会进行自动验证和过滤操作,需要自行处理,如果只是想简单创建一个数据对象,并且不需要完成一些额外的功能的话,可以使用data方法简单的创建数据对象。

2、ThinkPHP可以帮助我们快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象。create方法创建的数据对象是保存在内存中的,并没有实际的写入到数据库中。

//实例化user模型
    $user=M('user');
  
   //根据表单提交的POST数据创建数据对象,并保存在内存中,可以通过dump($user)查看
    $user=create();

   //把创建的数据对象写入数据库中
    $user->add();

3、create方法支持从其它方式创建数据对象,如,从其它的数据对象或者数组等。

$data['name']='ThinkPHP';
   $data['eamil']='ThinkPHP@gmail.com';
   $user->create($data);

   甚至还可以支持从对象创建新的数据对象,如从user数据对象创建新的member数据对象
   $user=M('user');
   $user->find(1);
   $member=M('member');
   $member->create($user);

4、create方法在创建数据对象的同时,还完成了一些很有意义的工作,包括令牌验证、数据自动验证、字段类型查找,数据自动完成等。
  
因些,我们熟悉的令牌验证、自动验证和自动完成功能,其实都必须通过create方法才能生效。

5、令牌验证:
  
功能:可以有效防止表单的远程提交等安全防护。

   config.php中添加如下配置:

'TOKEN_ON'   =>  true, //是否开启令牌验证
   'TOKEN_NAME'  =>  'token',// 令牌验证的表单隐藏字段名称
   'TOKEN_TYPE'  =>  'md5',//令牌验证哈希规则

自动令牌会向当前SESSION会话当中放上一个md5加密的字符串。并将这个字符串以隐藏域的形式插入到表单的form之前。这个字符串出现在两个地方,一个是在SESSION当中,另一个就是在表单当中。当你提交表单后,服务器第一件事就是对比这个SESSION信息,如果正确的话,准许表单提交,否则不允许提交。

查看create.html的的源代码会看到在表单form的结束标志之前会多了一个自动生成的隐藏域

<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />

(1)、如果希望自己控制隐藏域的位置,可以手动在表单页面添加 {__TOKEN__} 标识,系统会在输出模板的时候自动替换。

(2)、如果在开启表单令牌验证的情况下,个别表单不需要使用令牌验证
功能,可以在表单页面添加 {__NOTOKEN__} ,则系统会忽略当前表单的令牌验证。

(3)、如果页面中存在多个表单,建议添加 {__TOKEN__} 标识,并确保只有一个表单需要令牌验证。

(4)、如果使用create方法创建数据对象的话,会同时自动进行表单验证,如果没有使用该方法的话,则需要手动调用模型的autoCheckToken方法进行表单验证。

if (!$User->autoCheckToken($_POST)){
// 令牌验证错误
}

希望本文所示实例对大家的ThinkPHP程序设计有所帮助。

PHP 相关文章推荐
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
php实现水仙花数示例分享
Apr 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
php中JSON的使用与转换
Jan 14 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
Laravel5中Cookie的使用详解
May 03 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 #PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 #PHP
ThinkPHP验证码和分页实例教程
Aug 22 #PHP
ThinkPHP文件上传实例教程
Aug 22 #PHP
ThinkPHP中ajax使用实例教程
Aug 22 #PHP
ThinkPHP中的常用查询语言汇总
Aug 22 #PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 #PHP
You might like
PHP 函数语法介绍一
2009/06/14 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
PyQT实现多窗口切换
2018/04/20 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python主要用于哪些方向
2020/07/05 Python
python Xpath语法的使用
2020/11/26 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
实习心得体会
2014/01/02 职场文书
给实习单位的感谢信
2014/02/01 职场文书
社区庆八一活动方案
2014/02/02 职场文书
中学教师教育感言
2014/02/21 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
承诺书范本
2015/01/21 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
修辞手法有哪些?
2019/08/29 职场文书