山那边是海 发表于 2015-2-4 00:27:10

PHP网页编程之Apache办事器的用户认证 (转)

你的留言本应该加入注册以及分页功能了,而如果你更强的话,UI(用户界面)也可以加强,完成之后,感觉是不是特有成就感?不管怎么样,咱好歹是写了一个动态网站程序了,放在自己的网站上耍耍吧。apache|办事器   常常上彀的读者会碰到这类情形:会见一些网站的某些资本时,阅读器弹出一个对话框,请求输出用户名和暗码来获得对资本的会见。这就是用户认证的一种手艺。用户认证是回护收集体系资本的第一道防地,它掌握着一切登录并反省会见用户的正当性,其方针是仅让正当用户以正当的权限会见收集体系的资本。根基的用户认证手艺是“用户名+暗码”。


  Apache是今朝盛行的Web办事器,可运转在Linux、Unix、Windows等操作体系下,它可以很好地处理“用户名+暗码”的认证成绩。Apache用户认证所需求的用户名和暗码有两种分歧的存贮体例:一种是文本文件;另外一种是MSQL、Oracle、MySQL等数据库。上面以Linux的Apache为例,就这两种存贮体例,分离引见若何完成用户认证功效,同时对Windows的Apache用户认证作扼要的申明。

  采取文本文件存储

  这类认证体例的根基思惟是:Apache启动认证功效后,就能够在需求限制会见的目次下创立一个名为.htaccess的文件,指定认证的设置装备摆设号令。当用户第一次会见该目次的文件时,阅读器会显示一个对话框,请求输出用户名和暗码,停止用户身份切实其实认。若是正当用户,则显示所会见的页面内容,尔后会见该目次的每一个页面,阅读器主动送出用户名和暗码,不必再输出了,直到封闭阅读器为止。以下是完成的详细步调:

  以超等用户root进入Linux,假定Apache 1.3.12已编译、装置到了/usr/local/apache目次中。缺省情形下,编译Apache时主动到场mod_auth模块,使用此模块可以完成“用户名+暗码”以文本文件为存储体例的认证功效。

  1.修正Apache的设置装备摆设文件/usr/local/apache/conf/httpd.conf,对认证资本地点的目次设定设置装备摆设号令。下例是对/usr/local/apache/htdocs/members目次的设置装备摆设:

  <Directory /usr/local/apache/htdocs /members>

  Options Indexes FollowSymLinks

  allowoverride authconfig

  order allow,deny

  allow from all

  </Directory>

  个中,allowoverride authconfig一行暗示答应对/usr/local/apache/htdocs/ members目次下的文件停止用户认证。

  2.在限制会见的目次/usr/local/apache/htdocs/members下创立一个文件.htaccess,其内容以下:

  AuthName "会员区"

  AuthType basic

  AuthUserFile/usr/local/apache/members.txt

  require valid-user

  申明:文件.htaccess中经常使用的设置装备摆设号令有以下几个:

  1) AuthName号令:指定认证区域称号。区域称号是在提醒请求认证的对话框中显示给用户的(见附图)。

  2)AuthType号令:指定认证类型。在HTTP1.0中,只要一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5。

  3) AuthUserFile号令:指定一个包括用户名和暗码的文本文件,每行一对。

  4) AuthGroupFile号令:指定包括用户组清单和这些组的成员清单的文本文件。组的成员之间用空格分隔,如:

  managers:user1 user2

  5) require号令:指定哪些用户或组才干被受权会见。如:

  require user user1 user2(只要用户user1和user2可以会见)

  requiresgroupsmanagers (只要组managers中成员可以会见)

  require valid-user (在AuthUserFile指定的文件中任何用户都可以会见)

  3.使用Apache附带的法式htpasswd,生成包括用户名和暗码的文本文件:/usr/local/apache/members.txt,每行内容格局为“用户名:暗码”。

  #cd /usr/local/apache/bin

  #htpasswd -bc ../members.txt user1 1234

  #htpasswd -b ../members.txt user2 5678

  文本文件members.txt含有两个用户:user1,口令为1234;user2,口令为5678。注重,不要将此文本文件寄存在Web文档的目次树中,以避免被用户下载。

  欲懂得htpasswd法式的匡助,请履行htpasswd -h。

  当用户数目对照少时,这类办法对用户的认证是便利、省事的,保护任务也复杂。然而在用户数目无数万人,乃至数十万人时,会在查找用户上花失落必定工夫,从而下降办事器的效力。这类情况,应采取数据库体例。

  采取数据库存储

  今朝,Apache、PHP4、MySQL三者是Linux下构建Web网站的最好伙伴,这三个软件都是收费软件。将三者联合起来,经由过程HTTP协定,使用PHP4和MySQL,完成Apache的用户认证功效。

  只要在PHP4以Apache的模块体例来运转的时分才干停止用户认证。为此,在编译Apache时需求到场PHP4模块一同编译。假定PHP4作为Apache的模块,编译、装置Apache到/usr/local/apache目次,编译、装置MySQL到/usr/local/mysql目次。然落后行上面的步调:

  1.在MySQL中创立一个数据库member,在个中创立一个表users,用来寄存正当用户的用户名和暗码。

  1)用vi号令在/tmp目次创立一个SQL剧本文件auth.sql,内容为:

  drop database if exists member;

  create database member;

  use member;

  create table users (

  username char(20) not null,

  password char(20) not null,

  );

  insertsintosusers values("user1",password("1234"));

  insertsintosusers values("user2",password("5678"));

  2)启动MySQL客户法式mysql,履行上述SQL剧本文件auth.sql的号令,在表users中增添两个用户的纪录。

  #mysql -u root -pmypwd</tmp/auth.sql

  2.编写一个PHP剧本头文件auth.inc,法式内容为:

  <?php

  function authenticate() {

  Header('WWW-authenticate: basic realm="会员区"');

  Header('HTTP/1.0 401 Unauthorized');

  echo "你必需输出准确的用户名和口令。 ";

  exit;

  }

  function CheckUser(, ) {

  if ( == "" || == "") return 0;

   = "SELECT username,password FROM usersswheresusername='' and password=password('')";

   = mysql_connect('localhost', 'root', 'mypwd');

  mysql_select_db('member',);

   = mysql_query(, );

  =mysql_num_rows();

  mysql_close();

  if (>0) {

  return 1; //无效登录

  } else {

  return 0; //有效登录

  }

  }

  ?>

  函数Authenticate()的感化是使用函数Header('WWW-authenticate: basic realm="会员区"'),向阅读器发送一个认证恳求动静,使阅读器弹出一个用户名/暗码的对话框。当用户输出用户名和暗码后,包括此PHP剧本的URL将主动地被再次挪用,将用户名、暗码、认证类型分离寄存到PHP4的三个特别变量:、、,在PHP法式中可依据这三个变量值来判别是不是正当用户。Header()函数中,basic暗示根基认证类型,realm的值暗示认证区域称号。

  函数Header('HTTP/1.0 401 Unauthorized')使阅读器用户在一连屡次输出毛病的用户名或暗码时吸收到HTTP 401毛病。

  函数CheckUser()用来判别阅读器用户发送来的用户名、暗码是不是与MySQL数据库的不异,若不异则前往1,不然前往0。个中mysql_connect('localhost', 'root', 'mypwd')的数据库用户名root和暗码mypwd,应依据本人的MySQL设置而改动。

  3.在需求限制会见的每一个PHP剧本法式开首增添以下法式段:

  <?php

  require('auth.inc');

  if (CheckUser(,)==0) {

  authenticate();

  } else {

  echo "这是正当用户要会见的网页。"; //将此行改成向正当用户输入的网页

  }

  ?>

  把需求向正当用户显示的网页内容放到else子句中,代替上述法式段的一行:

  echo "这是正当用户要会见的网页。";

  如许,当用户会见该PHP剧本法式时,需求输出用户名和暗码来确认用户的身份。

  Windows的Apache用户认证

  1.采取文本文件寄存用户名和暗码时,其办法同前,但需求注重的是暗示途径的目次名之间、目次名与文件名之间一概用斜线“/”分隔,而不是反斜线“”。

  2.采取MySQL数据库寄存用户名和暗码时,起首按以下办法将PHP 4.0.3作为Apache的模块来运转,然后按上述“采取数据库存储用户名和暗码的用户认证”的办法完成。

  1)下载Windows版的Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32,将三个软件分离解压、装置到C:pache、C:PHP4、C:mysql目次。

  2) C:PHP4SAPI目次有几个经常使用Web办事器的PHP模块文件,将个中php4apache.dll拷贝到Apache的modules子目次(C:pachemodules)。

  3)修正Apache的设置装备摆设文件C:pachenfhttpd.conf,增添以下几行:

  LoadModule php4_module modules/ php4apache.dll

  AddType application/x-httpd-php .php3

  AddType application/x-httpd-php-source .phps

  AddType application/x-httpd-php .php

  第一行使PHP4以Apache的模块体例运转,如许才干停止用户认证,后三行界说PHP剧本法式的扩大名。

  4)在autoexec.bat文件的PATH号令中增添PHP4地点途径“C:PHP4”,从头启动电脑。


经我测试,2.0版本的apache不成

到现在,对排版还是不很熟练,经常会排不好。

因胸联盟 发表于 2015-2-4 13:09:19

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

精灵巫婆 发表于 2015-2-7 22:04:29

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

小女巫 发表于 2015-2-23 11:46:14

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

飘飘悠悠 发表于 2015-3-2 04:46:37

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

透明 发表于 2015-3-11 02:04:54

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

仓酷云 发表于 2015-3-11 06:41:33

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

admin 发表于 2015-3-16 02:53:57

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

若相依 发表于 2015-3-21 02:09:59

要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。

乐观 发表于 2015-3-23 21:54:02

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

莫相离 发表于 2015-4-3 17:24:18

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

冷月葬花魂 发表于 2015-4-5 11:34:10

Ps:以上纯属原创,如有雷同,纯属巧合

蒙在股里 发表于 2015-4-13 00:53:53

最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。

第二个灵魂 发表于 2015-4-16 06:12:49

Ps:以上纯属原创,如有雷同,纯属巧合

再现理想 发表于 2015-4-20 15:53:58

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

变相怪杰 发表于 2015-4-21 20:04:30

做为1门年轻的语言,php一直很努力。

山那边是海 发表于 2015-4-27 02:23:13

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

谁可相欹 发表于 2015-5-10 02:34:52

爱上php,他也会爱上你。

若天明 发表于 2015-6-12 08:02:13

要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。

深爱那片海 发表于 2015-7-7 05:01:43

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页: [1] 2
查看完整版本: PHP网页编程之Apache办事器的用户认证 (转)