多数大学生出来选择的工作和专业无关
首页 > 专业知识

用PHP实现表单验证码登陆校验

时间:2018-05-15 20:36:55 [来源]:郑州PHP培训学校

   用PHP实现表单验证码登陆校验

  原理:生成一个图片,并且保存图片中显示的字符到SESSION.在登陆时判断输入的校验码是否和SESSION中校验码相同.
  这是生成校验码和图片的文件checkNumber.phpsession_start();
  if($act == "init")
  {
  Header("Content-type: image/png");
  srand(microtime() * 100000);
  $login_check_number = strval(rand("1111","9999"));session_register("login_check_number");
  //这里是使用了SESSION来保存校验码.
  //当然也可以用COOKIE
  //setcookie("login_check_number",$login_check_number);//然后将第一行的session_start()删除;
  //不推荐使用COOKIE,因为使用COOKIE并不能进行安全的验证.
  $h_img = imagecreate(40,17);
  $c_black = ImageColorAllocate($h_img, 0,0,0);$c_white = ImageColorAllocate($h_img, 255,255,255);imageline($h_img, 1, 1, 350, 25, $c_black);imagearc($h_img, 200, 15, 20, 20, 35, 190, $c_white);imagestring($h_img, 5, 2, 1, $login_check_number, $c_white);ImagePng($h_img);
  ImageDestroy($h_img);
  die();
  }
  /*
  使用方法:
  在HTML文件中加入在登陆校验PHP页面中加入以下代码(注意:在加入代码前不能有输出,因为使用了SESSION)//$number 是你输入的校验码的值
  include_once("./checkNumber.php");
  //检验校验码
  if($number != $login_check_number || empty($number)){
  print("校验码不正确!");
  die();
  }
  */
  ?>
  使用SESSION的问题:
  如果打开登陆页在SESSION的失效后才进行登陆,那么登陆会失败.
  使用COOKIE的问题:
  COOKIE是保存在客户端的,所以如果使用COOKIE的话还不如不用.
  针对VBB论坛.保存checkNumber.php后.修改MYSQL数据库template数据表的title 为 logincode forumhome_logincode username_loggedout的template 内容.
  然后在member.php的
  if ($action=="login")
  后加入
  //检验校验码
  include_once("./checkNumber.php");
  if($number != $login_check_number || $number == ""){
  print("校验码不正确!");
  die();
  }
  怎样使用PHP调用功能强大的JAVA类库
  JAVA是个非常强大的编程利器,它的扩展库也是非常的有用,这篇教程,主要讲述怎样使用PHP调用功能强大的JAVA 类库(classes)。为了方便你的学习,这篇教程将包括JAVA的安装及一些基本的例子。
  windows下的安装
  第一步:安装JDK,这是非常容易的,你只需一路回车的安装好。然后做好以下步骤。
  在 Win9x 下加入 :“PATH=%PATH%;C:\jdk1.2.2\bin” 到AUTOEXEC.BAT文件中在 NT 下加入 “;C:\jdk1.2.2\bin”到环境变量中。
  这一步是非常重要的,这样PHP才能正确的找到需调用的JAVA类。
  第二步:修改你的PHP.INI文件。
  [java]
  extension=php_java.dll
  java.library.path=c:\web\php4\extensions\java.class.path="c:\web\php4\extensions\jdk1.2.2\php_java.jar;c:\myclasses"在PHP.INI中加入extension=php_java.dll
  并在[java]中,设定好java.class.path,让它指向php_java.jar,如果你使用新的JAVA类,你也应该存入这个路径,在这篇例子中,我们使用c:\myclasses这个目录。
  第三步:测试环境,创建如下PHP文件:
  $system = new Java("java.lang.System");
  print "Java version=".$system->getProperty("java.version")."\n";
  print "Java vendor=".$system->getProperty("java.vendor")."\n\n";
  print "OS=".$system->getProperty("os.name")." ".
  $system->getProperty("os.version")." on ".
  $system->getProperty("os.arch")."
  \n";
  $formatter = new Java("java.text.SimpleDateFormat","EEEE,MMMM dd, yyyy 'at' h:mm:ss a zzzz");
  print $formatter->format(new Java("java.util.Date"))."\n";?>
  如果你正确安装了,你将会看到以下信息:
  Java version=1.2.2
  Java vendor=Sun Microsystems Inc.
  S=Windows 95 4.10 on x86
  Wednesday, October 18, 2000 at 10:22:45 AM China Standard Time这样,我们就已经成功的建立起了可以使用JAVA类的PHP运行环境,我们可以开始我们接下去的课程了。
  例子1:创建和使用你自己的JAVA类
  创建你自己的JAVA类非常容易。新建一个phptest.java文件,将它放置在你的java.class.path目录下,文件内容如下:
  public class phptest{
  /**
  * A sample of a class that can work with PHP* NB: The whole class must be public to work,* and of course the methods you wish to call* directly.
  *
  * Also note that from PHP the main method* will not be called
  */
  public String foo;
  /**
  * Takes a string and returns the result
  * or a msg saying your string was empty
  */
  public String test(String str) {
  if(str.equals("")) {
  str = "Your string was empty. ";
  }
  讲解php开发应用mvc框架技术来编程
  本文讲一下PHP应用mvc框架来编程的方法,什么是mvc呢,来看本文就知道了,在.net中,引入了asp.net mvc,很多人开始使用了,那么php当然也可以进行mvc的开发。
  什么是MVC
  MVC是一个可以让你把“三个部分(即MVC的全称,Model、 View、Controller)”谐调地组成一个复杂应用程序的概念。一辆汽车就是一个在现实生活中非常好的MVC例子。我们看车都看两个View(显 示)部分:内部和外部。而这两个都离不开一个Controller(控制者):司机。刹车系统、方向盘和其他操控系统代表了Model(模型):他们从司 机(Controller)那里取得控制方法然后应用到内部和外观(View)。
  网络上的MVC
  MVC框架所涵盖的概念相当简单并且极度灵活。基本的概念就是,你有一个单独的控制器(如index.php)用来控制所有建立在参数请求基础上的框架内应用程序。这个控制器通常包含了(最小程度上)一个定义模型的参数、一个事件和一个GET参数。这样控制器就能确认所有的请求然后运行相应的事件。打个 比方来说,一个像这样/index.php?module=foo&event=bar的请求很有可能就是用来载入一个名叫foo的类,然后运行 foo::bar()[就是其中的bar()函数]。这样做的好处有:
  一个对应所有应用程序的接口
  同时维护一个应用程序内无数的代码非常麻烦,因为每一段代码都有自己的相对路径、数据库链接、验证等等。而这样做就免除你在这方面的烦恼,允许你合并并重复使用代码为什么要创建自己的MVC框架
  迄今为止,我没有见到过太多用PHP写的MVC框架。事实上我仅仅知道一个-Solar,是完全用PHP5写的。另外一个是Cake,一个试图成为 PHP的RoR(Ruby on Rails-一个Ruby语言开源网络框架)。我自己对这两个框架都有一些不满意的地方:它们都没有利用到PEAR,Smarty等所包含的现有代码;现 在的Cake还比较紊乱;最后,Solar是一个绝大部分由一个人写的作品(我无意说其作者Paul不是一个好人或者好程序员)。这些问题可能并不会让你 否认它们,而且很有可能你根本不关心这些问题。但是正因为如此,我请各位尽可能地审视它们。
  老方式
  如果回到2001看自己写的代码,作者有可能找到一个叫template.txt的文件,它看起来像这样:
  phprequire_once('config.php');//Other requires, DB info, etc.$APP_DB='mydb';$APP_REQUIRE_LOGIN=false;//Set to true if script. requires login$APP_TEMPLATE_FILE='foo.php';//Smarty template$APP_TITLE='My Application';if($APP_REQUIRE_LOGIN==true) {if(!isset($_SESSION['userID'])) {header("Location: /path/to/login.php");exit(); } }$db=DB::connect('mysql://'.$DB_USER.':'.$DB_PASS.'@localhost/'.$APP_DB);if(!PEAR::isError($db)) {$db->setFetchMode(DB_FETCHMODE_ASSOC); }else{die($db->getMessage()); }//Put your logic here // Output the templateinclude_once(APP_TEMPLATE_PATH.'/header.php');include_once(APP_TEMPLATE_PATH.'/'.$APP_TEMPLATE_FILE);include_once(APP_TEMPLATE_PATH.'/footer.php');?>
  只是看这些代码都会让我有退缩的欲望。这段代码的概念就是确保每一个应用程序都能适用于这个处理方法,比如我可以简单地将 template.txt拷进myapp.php,改变一些变量,瞧,它就能运行起来了。
  尽管如此,这个组织严密的处理方法存在一些严重的缺点:
  如果我的老板想让作者用myapp.php在一些情况下输出PDF、一些情况下输出HTML、一些情况下(直接提交的XML请求)SOAP,我该怎么办?
  如果这个应用程序需要IMAP或LDAP验证,我该怎么办?
  我该如何处理各种不同的代码(包括编辑、升级和删除)?
  我该如何处理多级验证(管理员 vs. 非管理员)?
  我该如何启用输出缓存?
  新方式
  将所有东西都扔进这个MVC框架,你会发现生活是如此简单。请对比以下代码:
  phpclassmyappextendsFR_Auth_User {publicfunction__construct() { parent::__construct(); }publicfunction__default() {//Do something here}publicfunctiondelete() { }publicfunction__destruct() { parent::__destruct(); } }?>
  注意这段代码显然不是用来链接到一个数据库、判断一个用户是否已经登陆、或者输出任何其他信息。控制器掌握了所有的一切。
  如果我想验证LDAP,我可以建立FR_Auth_LDAP。控制器可以识别某些输出方法(比如$_GET['output'])并可以随时转换成 PDF或者SOAP。事件处理delete,只负责删除,其他的它都不管。因为这个模块拥有一个FR_User类的实例,它可以简单地判断一个用户是否已 经登陆等等。
  Smarty,作为模板引擎控制缓存是理所当然的,但是控制器同样可以控制一部分缓存。
  从前面讲的老方式到MVC方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。
 

上一篇:在PHP中操作MySQL要注意哪些问题?

下一篇:PHP中的字符串函数的使用方法