仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1380|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网页设计PHP+APACHE完成用户论证的办法

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:28:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。apache|论证   在专业的 Web 站台上,经常会需求利用者的帐号及暗码,也就是身份确认的举措。初期的 NCSA httpd 伺服器并没有供应这项利用者确认的功效,Webmaster 只能用手工打造一个身份确认的 CGI 程式。
自 CERN httpd 以后的 Web 伺服器大部分都供应了利用者身份确认的功效。仅管每套 Web 伺服器的设建都不太不异,但在设定上都迥然不同。

以下就是 Apache 伺服器上的利用者身份确认的设定。


<Directory /home/MyMember>
AuthType Basic
AuthName MyMember
AuthUserFile /usr/local/MyMember.txt
Options Includes ExecCGI
<Limit GET POST>
require valid-user
</Limit>
</Directory>

在这个例子中,当利用者在看 MyMember 目次下一切的档案,包含图片档案及其它各式档案时,都需求利用者的帐号暗码确认。而利用者的帐号及暗码档都存在于/usr/local/MyMember.txt 当中。

这个帐号暗码档 /usr/local/MyMember.txt 的模样能够以下例。个中冒号前的字串是利用者帐号,冒号以后的字串是经由不成复原加密的暗码,编码普通都是利用传统的 DES 编码,暗码的头二个字是相似种子的字元 (salt),本例中都是 3P。每行代表一名利用者。固然 Webmaster 要自行掌握重覆帐号的情况。对照特别是在 Win32 体系上架 Apache 的情况,冒号后的暗码不成加密,由于 Win32 没有供应这方面的编码
API,因而利用者暗码以密码的体例存在。


john1234:3PWudBlJMiwro
queenwan:3PFNVLNPN9W0M
noname00:3PEsXaJx5pk7E
wilson49:3PjoWb0EnaG22
rootboot:3PIt0snI6.84E
sun_moon:3PvymMeNOc.x.
nobody38:3PbskPKwV94hw

在 Apache 1.3.6 版上,可以用 ~apache/bin/htpasswd 来发生单笔的帐号及暗码,但关于需求大笔材料的贸易站台,能够就需求自行写程式来处置了。UNIX 上需求呼唤 crypt() 来处置编码。



在一切都设定好了以后,连线时就会在阅读器呈现查核暗码的视窗,如上图就是SEEDNet 的 MySEED 网站的利用者查核机制。在输出了帐号及暗码后,阅读器会将它用BASE64 编码后,传到伺服器端。固然 BASE64 只是编码不是加密,因而在网路上这类传输的平安性依然不高,仍是有能够被两头的刽客截下,再将 BASE64 复原,这也是全部利用者认证中最十全十美的中央,也许往后增援摘要认证 (Digest) 及利用 MD5 编码后,可以处理这类成绩。以后每页依然需求帐号及暗码,只不外阅读器会帮你自动送出,不必再输出帐号暗码了。这方面阅读器会保存到被封闭为止,下次重履行阅读器仍需输出第一次。

在利用者数目少时,利用上述的办法轻松又省事。然而在利用者无数万人,乃至数十万人时,会产生全部伺服器的效力都被搜索帐号暗码下拖垮,能够读取一页需求数十秒到数分钟。这类情况再利用伺服器供应的暗码查核机制就不太明智了。在Netscape Enterprise Server 上能够就能够利用 NSAPI 来开辟本人的查核体例,在IIS 上也能够用 ISAPI 过滤器开辟。写 C/C++ 程式呼唤 NSAPI/ISAPI 老是很累,在PHP 上有了别的的选择,这也是本节的主题。


PHP 的 HTTP 相干函式库供应了 header() 的函式。很多 Web 伺服器与客户真个互动,都可使用这个函式来变戏法。例如在某个 PHP 页面最入手下手处,也就是第一行或第二行,到场以下的程式,可以将利用者重导到作者的网页。


<?php
header("Location: http://wilson.gs");
exit;
?>


固然,在上述程式以后的 HTML 文字或是 PHP 程式都永久不会呈现在利用者端了。

一样的事理,咱们就用 header() 来变利用者认证的幻术。可以在 PHP 的最开首送出字串到利用者端,就会在利用者端呈现下图的视窗。


<?php
Header("WWW-Authenticate: Basic realm="Member"");
Header("HTTP/1.0 401 Unauthorized");
?>

在程式中字串 realm="Member" 中的 Member 字样呈现在图中,固然若利用中文字代替,阅读器端也会呈现中文字,如下面的 MySEED 图。若 Web 站台利用者还有其它语文,如英文或日文,送出中文的 realm 字串仿佛就对照不适合。不管若何,这都要视站台的性质及利用者定位而决意。

固然这仍是很粗拙,由于除送出视窗后,就没有下文了,帐号输出准确也好,输出毛病也罢,都不会有任何的了局。咱们需求再更进阶的程式来处置。


在后真个利用认证上,思索利用材料库作为贮存帐号及暗码的后端,在这类架构可以包容很多的利用者,管它一万个利用者仍是十万个利用者。若您的站已无数十万个利用者帐号,那末祝贺您,您的站算是世界级的大站了。MySQL 是个不错的选择,很多站台,乃至是贸易化的站台都用它来做后真个材料库。固然您要架真实的贸易站台,钱不是成绩的话,那可使用口碑最广的 Oracle 材料库系列。

要在 PHP 中利用任何材料库,都要先将材料库的伺服器端及客户端设定好,以后才编译 PHP 及 Apache 体系。

筹办好 MySQL 及 PHP 以后,先在 MySQL 中到场新的材料库,本例是到场mymember,用其余名字固然也能够。MySQL 要到场材料库 (Database) 很轻易,只需在MySQL 寄存 Database 的中央 mkdir 就能够了。例如在 UNIX Shell 下打

hahaha:/usr/local/mysql/data# mkdir mymember

在创立了材料库以后,尚需求创立材料表格 (Table) 方能利用。设定的表格以下,可以将它储在 /tmp/memberauth.sql 中


CREATE TABLE MemberAuth (
Serial mediumint(9) NOT NULL auto_increment,
Username char(8) NOT NULL,
Password char(8) NOT NULL,
Enable char(1) DEFAULT ’0’ NOT NULL,
PRIMARY KEY (Serial)
);

档案 memberauth.sql

先看看 memberauth.sql 的这些栏位。Serial 是个主动增添的整数栏位,每输出一笔材料,就会主动加一,这固然不克不及是空的栏位,因而就用 NOT NULL 了。第二个栏位是 Username,代表利用者的帐号,为了一致和顺应各体系起见,设定成八个字,固然这个栏位也不克不及是空的。Password 是第三个栏位,为利用者的暗码。第四个栏位 Enable 做为帐号是不是无效的旗标,设计上 0 暗示无用,1 表可用,往后还可到场其它值做分歧的用处。

设计好了材料表以后,就要将材料表到场材料库了。因为常要利用 MySQL 材料库,可以到 http://www.phpwizard.net/phpMyAdmin 下载 phpMyAdmin,利用阅读器操作及办理 MySQL,轻松又便利。若利用这套 phpMyAdmin 可以在它的利用者介面上输出memberauth.sql 到场 MySQL 中。或也能够在 UNIX Shell 下输出下式,也是有一样的后果。

mysql mymember < /tmp/memberauth.sql

在筹办好了以后,就能够输出利用者帐号及暗码在 memberauth 材料表中了。固然仍是利用 phpMyAdmin 便利,用 mysql 程式就要一笔笔的 INSERT 了。

接着进入了设计函式的阶段了。


<?php
file://---------------------------
// 利用者认证函式 auth.inc
// Author: Wilson Peng
// Copyright (C) 1999
file://---------------------------
$error401 = "/home/phpdocs/error/401.php";
if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
} else {

$db_id = mysql_pconnect("localhost", "myid", "mypw");
$result = mysql_db_query("mymember","select password, enable
from MemberAuth where username=’$PHP_AUTH_USER’");

$row = mysql_fetch_array($result);
$MemberPasswd = $row[0];
$MemberEnable = $row[1];
if ($MemberEnable==0) {
echo "您的帐号被停用了";
exit;
}

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
}
}
?>

Copyright (C) 1999, Wilson Peng

要利用这个 auth.inc,要在每一个 PHP 的第一行到场
<? require("auth.inc"); ?> 。
在到场本程式的 PHP 档案城市反省帐号暗码,图片等就不会反省,比起利用 Web 伺服器功效的某目次下全都反省,PHP 显得有弹性多了。

$error401 = "/home/phpdocs/error/401.php";

这行暗示在利用者按下作废,或反省掉败时,要显示给利用者看的档案。

if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
} else


到 else 之前,若没有传入暗码,则送出输出暗码的视窗。个中的
$PHP_AUTH_USER、$PHP_AUTH_PW 是 PHP 中特别的变数,分离代表利用者确认的帐号及暗码。下面的程式也是使用这二个变数来处置利用者认证。

$db_id = mysql_pconnect("localhost", "myid", "mypw");
$result = mysql_db_query("mymember","select password, enable from
MemberAuth where username=’$PHP_AUTH_USER’");

$row = mysql_fetch_array($result);
$MemberPasswd = $row[0];
$MemberEnable = $row[1];

若利用者有输出帐号及暗码,则向材料库查询。同时查核该利用者是不是仍可以使用。

if ($MemberEnable==0) {
echo "您的帐号被停用了";
exit;
}

上四行程式为帐号被停用的情况。

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
}

暗码毛病则再次向利用者请求输出帐号及暗码。

在实践利用时,可以视需求到场的网页再到场 auth.inc 这个档案,就不必连看张图形也要查一次暗码,下降伺服器和利用者二真个资本。固然,和 MySQL 的连络上,可使用 mysql_pconnect() 一向和 MySQL 伺服器连线。或是利用mysql_connect() 每次从头连线,用这个函式要记得早点利用 mysql_close() 将材料库封闭。上面的程式 auth1.inc 是另外一版本的认证程式,就是开启连线后即刻封闭,释放资本的例子。


<?php
file://---------------------------
// 利用者认证函式-1 auth1.inc
// Author: Wilson Peng
// Copyright (C) 1999
file://---------------------------
$error401 = "/home/phpdocs/error/401.php";
if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
} else {

$db_id = mysql_connect("localhost", "myid", "mypw");
$result = mysql_db_query("mymember","select password, enable
from MemberAuth where username=’$PHP_AUTH_USER’");

$row = mysql_fetch_array($result);
$MemberPasswd = $row[0];
$MemberEnable = $row[1];
mysql_close($db_id);
if ($MemberEnable==0) {
echo "您的帐号被停用了";
exit;
}

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header("WWW-Authenticate: Basic realm="超金卡会员"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
}
}
?>
  模仿的不光是模仿,模仿的同时在加改进,就成了自己的作品了。
沙发
发表于 2015-2-4 13:11:13 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
蒙在股里 该用户已被删除
板凳
发表于 2015-2-5 22:10:52 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
活着的死人 该用户已被删除
地板
发表于 2015-2-13 21:48:39 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
若天明 该用户已被删除
5#
发表于 2015-2-23 11:34:30 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
小女巫 该用户已被删除
6#
发表于 2015-3-2 03:47:59 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
飘灵儿 该用户已被删除
7#
发表于 2015-3-6 16:26:38 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
柔情似水 该用户已被删除
8#
发表于 2015-3-13 04:09:21 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-21 08:56:19 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
海妖 该用户已被删除
10#
发表于 2015-5-12 09:20:06 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
乐观 该用户已被删除
11#
发表于 2015-6-5 23:02:18 | 只看该作者
当然这种网站的会员费就几十块钱。
第二个灵魂 该用户已被删除
12#
发表于 2015-6-8 10:15:43 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
再现理想 该用户已被删除
13#
发表于 2015-6-13 21:18:26 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
透明 该用户已被删除
14#
发表于 2015-6-28 13:15:06 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
因胸联盟 该用户已被删除
15#
发表于 2015-7-1 00:22:25 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
admin 该用户已被删除
16#
发表于 2015-7-1 03:06:47 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
小魔女 该用户已被删除
17#
发表于 2015-7-2 23:45:59 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
莫相离 该用户已被删除
18#
发表于 2015-7-8 06:55:30 | 只看该作者
实践是检验自己会不会的真理。
兰色精灵 该用户已被删除
19#
发表于 2015-7-9 10:18:46 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 18:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表