基于表单密码验证和HTTP验证的PHP使用示例
本文介绍了基于表单密码验证和HTTP验证的PHP用法,供大家参考,具体分析如下:PHP HTTP认证机制是唯一有效的只有当PHP运行在Apache模块模式,所以此功能不适用于CGI版本。在Apache模块的PHP脚本,头()函数可以用来发送所需的信息到客户端浏览器认证,所以它会弹出一个用户名 /密码输入窗口,当用户输入用户名和密码,包含URL将被添加预定义变量php_auth_user PHP脚本,php_auth_pw和auth_type叫做再次,设置用户名这三个变量,分别为密码和身份验证类型。预定义的变量存储在_server美元或美元支持http_server_vars阵列。基本和摘要式(自PHP 5.1.0)认证方法有兴趣的朋友可以参考头()函数相关信息。
PHP版本的问题:autoglobals全局变量,包括_server美元,等等,都是有效的PHP 4.1.0,美元和http_server_vars有效期从PHP 3。
下面是一个脚本示例,它强制页面上的客户端身份验证。
例如34-1。基本HTTP认证范例
复制代码代码如下:< PHP
如果(!isset($ _server { 'php_auth_user ' })){
头('www-authenticate:基本境界=我的王国);
头('http / 1 401未经授权的);
echo'text如果用户点击取消按钮发送;
出口;
{人}
回声你好{ $ _server { 'php_auth_user} };
回声你进入{ $ _server { 'php_auth_pw} }作为你的密码;
}
>
例如34-2。摘要HTTP认证范例
这个例子展示了如何实现一个简单的摘要HTTP认证脚本。欲了解更多信息,请参阅RFC 2617。
复制代码代码如下:< PHP
境界= 'restricted美元区;
用户密码
为用户('admin= 'mypass阵列,客用=客用的);
如果(!isset($ _server { 'php_auth_digest ' })){
头('http / 1.1 401未经授权的);
标题:('www-authenticate消化领域=。美元的境界。
=奥特目前QoP =。Uniqid(),不透明=MD5($境界)。);
模具(中发如果用户点击取消按钮);
}
的php_auth_digest变 / /分析
preg_match( /用户名=(P *),的境界= (P.),*临时= (P.),* URI = (P.),*反应= (P.),*不透明= (P.),* QOP =(P *),S *数控=(小黑),S * cnonce =(小黑)/ _server美元,{'php_auth_digest},为消化);
如果(!isset($用户{ $消化{ 'username))
模具('username无效!;
有效响应生成
$ A1 = MD5($消化{ 'username} ':'。美元的境界。为用户。{ $消化{ 'username);
$ A2 = MD5($ _server { } 'request_method '。':'消化' } { 'uri美元);
valid_response美元= MD5($ A1。摘要:美元{ 'nonce}。:。消化'nc'} {美元。摘要:美元{ 'cnonce}。摘要:美元{ 'qop}。:'。A2);
如果美元'response'} {(消化!= $ valid_response)
模具('wrong凭据!;
有效的用户名密码。
echo'your登录:'。为消化'username'} {;
>
兼容性问题:请在HTTP头代码的编写要更加小心,以确保所有客户的兼容性,基本的关键词的第一个字母要大写字母B,分割字符串必须用双引号括起来(不是单引号)和参考;在头的HTTP / 1 401,前401必须有一个且只有一个空间。
在上面的例子中,只打印php_auth_user和php_auth_pw的价值,但在实践中,你可能需要检查用户名和密码是否合法,也许搜索数据库教程,或检索从DBM文件。
请注意,有些浏览器本身存在问题,似乎对头部的顺序有点挑剔,目前看来,在发送HTTP / 1 401之前发送www验证头似乎能够解决这个问题。
由于PHP 4.3.0,为了通过脚本来从传统的认证页面的外部机制得到密码防止人,当外部认证为一个特定的页面,和安全模式打开,该php_auth变量不会被设置,但在任何情况下,remote_user可以用来识别用户外部认证,可用于_server美元{ 'remote_user}变量。
配置说明:无论是PHP authType指令确定是否外部认证机制是有效的。
请注意,这仍不能阻止有人偷密码认证的URL相同的服务器上,通过身份验证的URL。
Windows Navigator和Internet Explorer浏览器Netscape认证缓存将清空所有本地浏览器在整个域获得401返回的信息从服务器,它可以有效地消除用户,并迫使他们输入自己的用户名和登录一些过期这样的密码,或为取消按钮的响应。
例如34-3。HTTP认证例被迫重新输入用户名和密码
复制代码代码如下:< PHP
函数验证(){
头('www-authenticate:基本境界=测试认证系统);
头('http / 1 401未经授权的);
您必须输入一个有效的登录ID和密码才能访问);
出口;
}
如果(!isset($ _server { 'php_auth_user})| |
($ _post { 'seenbefore'} { } _post美元'oldauth= = 1 = = $ _server){ { 'php_auth_user})
认证();
}
{其他
回声欢迎:{ $ _server { 'php_auth_user} };
回声老:{ $ _request { 'oldauth} };
回声n;
回声n;
回声n;
回声n;
回声n;
}
>
为基本标准的HTTP的行为是不必要的,它可以不依靠这种方法,Lynx浏览器测试表明,天猫不接收401的服务器的信息返回空的认证文件,所以只要检验要求的证明文件并没有改变,只要用户点击返回按钮,然后单击前进按钮,原来的资源仍然可以访问,但允许用户退出他们的认证信息,根据_关键。
在下面的例子中,我们用了两个变量,php_auth_user美元美元和php_auth_pw,验证进入者是合法的,允许进入。用户名和密码对,允许登录在本例中是TNC和性质,分别为:
复制代码代码如下:< PHP
如果(!isset($ php_auth_user))
{
报头(www身份验证:基本域=我的域);
页眉(1/401未经授权);
回声文本,如果用户点击取消buttonn发送;
出口;
}
其他的
{
如果(!($ php_auth_user = =TNCphp_auth_pw美元= =自然))
{
如果是错误的用户名/密码强制验证
报头(www身份验证:基本域=我的域);
页眉(1/401未经授权);
回声错误:php_auth_user美元/美元php_auth_pw无效。;
出口;
}
其他的
{
欢迎跨国公司!;
}
>
事实上,它不太可能在实际引用中使用明显的用户名/密码对,而是通过使用数据库或加密的密码文件来访问它们。
根据指定的身份验证信息验证用户的身份:
首先,我们可以使用下面的代码来判断用户是否输入了用户名和密码,并显示了用户输入信息。
复制代码代码如下:< PHP
如果(!isset($ php_auth_user)){
头('www-authenticate:基本境界=我的私人物品);
头('http / 1 401未经授权的);
echo'authorization必需的。;
出口;
}
{其他
回声你已进入这个用户名:php_auth_user美元
你已经进入了这个密码:php_auth_pw美元
授权类型:php_auth_type美元;
}
>
解释:
isset()函数来确定变量是否已被分配,并返回真或假。根据变量值的存在性。
标头()函数用于发送特定的HTTP头。值得注意的是,在使用头()函数时,必须在生成实际输出的任何HTML或PHP代码之前调用该函数。
尽管上面的代码非常简单,但它不能根据实际值有效地验证用户名和密码,但至少我们知道如何使用PHP在客户端生成输入对话框。
接下来,我们将了解如何基于指定的身份验证信息验证用户的身份。代码如下:
复制代码代码如下:< PHP
如果(!isset($ php_auth_user)){
头('www-authenticate:基本境界=我的私人物品);
头('http / 1 401未经授权的);
echo'authorization必需的。;
出口;
}
else if(isset($ php_auth_user)){
如果(($ php_auth_user!=admin)| |($ php_auth_pw!= 123){
头('www-authenticate:基本境界=我的私人物品);
头('http / 1 401未经授权的);
echo'authorization必需的。;
出口;
{人}
回声你被授权!;
}
}
>
在这里,我们首先检查用户是否输入了用户名和密码,如果没有相应的弹出对话框,要求用户输入的身份信息,然后判断用户输入的信息与管理 / 123指定的用户帐户行授权用户访问或提示用户重新输入正确的信息,这种方法适用于所有用户都使用相同的登录网站。
另一个简单的密码验证
如果你是在Windows98下编译和运行你的PHP脚本,或者你是Linux默认情况下,PHP将安装作为一个CGI程序,您将无法使用PHP程序实现认证功能,因此,没有边缘提供另一种简单的口令认证虽然方法不实用,但学习很好。
复制代码代码如下:< PHP
如果($ _post { } = =提交提交){ / /如果用户提交的数据,执行操作
密码=美元美元_post {密码}; / /获得用户输入的数据,并存储在变量密码
cpassword美元=美元cpassword _post { }; / /确认数据获取用户输入,存储在变量cpassord美元
如果(emptyempty($密码)| | emptyempty($ cpassword))
{
死()密码不是空的!;
}
((((( strlen($ 15 )))))密码)
{
死(密码的长度在5到15之间);
}
值比较
(!(strlen($密码)= strlen($ cpassword)))
{
死()两个输入密码不匹配!)
}
(!(密码= = =美元美元) / / cpassword)比较值和数据类型
{
死亡()两个密码不匹配!)
}
否则,输出密码,密码,因为它是如此输出*
{
为($我= 0;$我< strlen($密码);$我+ +)
{
;
}
}
}
>
表单验证-密码字段验证
>
请输入密码 uff1a
确认密码:
希望本文能对大家的PHP程序设计有所帮助。