热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ThinkPHP中的create方法与自动令牌验证

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

user表结构:id username password

\aoli\Home\Tpl\default\User\create.html

  1. <form action="__URL__/addit" method="post"> 
  2.   <input type="text" name="id" /> 
  3.   <input type="text" name="username" /> 
  4.   <input type="password" name="password" /> 
  5.   <input type="submit" name="sub" value="提交" /> 
  6. form> 

\aoli\Home\Lib\Action

  1. php 
  2.   class UserAction extends Action { 
  3.     function create(){ 
  4.          $this->display();      
  5.      } 
  6.      function addit(){ 
  7.          //向表user中添加表单内容 
  8.          $user=M(&#39;user&#39;); 
  9.          $user->create(); 
  10.          $user->add(); 
  11.          //判断是否存在令牌验证 
  12.          if(!$user->autoCheckToken($_POST)){ 
  13.              dump(&#39;no&#39;);   
  14.          }else{ 
  15.              dump(&#39;yes&#39;);      
  16.          } 
  17.   } 
  18. ?> 

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

  1. //实例化User模型 
  2.   $user=M(&#39;user&#39;); 
  3.  
  4. //获取表单的POST数据 
  5.   $data[&#39;username&#39;]=$_POST[&#39;username&#39;
  6.   $data[&#39;password&#39;]=$_POST[&#39;password&#39;
  7.  
  8. //写入到数据库 
  9.    $user->data($data)->add(); 

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

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

  1. //实例化user模型 
  2.        $user=M(&#39;user&#39;); 
  3.      
  4.      //根据表单提交的POST数据创建数据对象,并保存在内存中,可以通过dump($user)查看 
  5.        $user=create(); 
  6.  
  7.      //把创建的数据对象写入数据库中 
  8.        $user->add(); 

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

  1. $data[&#39;name&#39;]=&#39;ThinkPHP&#39;
  2. $data[&#39;eamil&#39;]=&#39;ThinkPHP@gmail.com&#39;
  3. $user->create($data); 

甚至还可以支持从对象创建新的数据对象,如从user数据对象创建新的member数据对象:

  1. $user=M(&#39;user&#39;); 
  2. $user->find(1); 
  3. $member=M(&#39;member&#39;); 
  4. $member->create($user); 

4、create方法在创建数据对象的同时,还完成了一些很有意义的工作,包括令牌验证、数据自动验证、字段类型查找,数据自动完成等.

因些,我们熟悉的令牌验证、自动验证和自动完成功能,其实都必须通过create方法才能生效.

5、令牌验证:

功能:可以有效防止表单的远程提交等安全防护。

config.php中添加如下配置:

  1. &#39;TOKEN_ON&#39;     =>   true, //是否开启令牌验证 
  2. &#39;TOKEN_NAME&#39;   =>   &#39;token&#39;,// 令牌验证的表单隐藏字段名称 
  3. &#39;TOKEN_TYPE&#39;   =>   &#39;md5&#39;,//令牌验证哈希规则 

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

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

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

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

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

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

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

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
author-avatar
白白加黑黑99_889
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有