热门标签 | 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. // 令牌验证错误 

推荐阅读
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 本文详细介绍了在腾讯云服务器上配置 phpMyAdmin 的方法,包括安装、配置和解决常见问题。通过这些步骤,您可以轻松地在腾讯云环境中部署并使用 phpMyAdmin。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 使用PHP实现网站访客计数器的完整指南
    本文详细介绍了如何利用PHP构建一个简易的网站访客统计系统。通过具体的代码示例和详细的解释,帮助开发者理解和实现这一功能,适用于初学者和有一定经验的开发人员。 ... [详细]
  • 本文详细介绍了如何在不同操作系统和设备上设置和配置网络连接的IP地址,涵盖静态和动态IP地址的设置方法。同时,提供了关于路由器和机顶盒等设备的IP配置指南。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • ZooKeeper集群脑裂问题及其解决方案
    本文深入探讨了ZooKeeper集群中可能出现的脑裂问题,分析其成因,并提供了多种有效的解决方案,确保集群在高可用性环境下的稳定运行。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
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社区 版权所有