一个基本的apache+php+psql网页登录验证的类源码
时间:2007-04-15
来源:互联网
<?php
//用途:
//定义一个类login,判断访问者是否登录或是否有权查看此页面,否则要求验证。如用户登录,就将用
//户名、密码和权限将会放在全局变量$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_USER']和
// $_SESSION['grade']中。
//调用方法:
//在每个需验证身份和权限的网页前加如下代码
//<?php $pagename ="xxxCOM";
//$grade=X;
//include 'login.inc';
//$thisdo =new login;
//$thisdo->login1($grade,$pagename ); ?>
//运行环境:
//php4.0以上,数据库为postgresql,数据表中有一表示用户权限的数字列
//编写人:江西吉水zhuoli76
//定义类login
class login{
//定义函数login1,从数据库中提取用户的管理权限(0至5),5为管理员。
//需要先设定$grade(页面所需权限),$pagename(页面名称)
function login1($grade,$pagename){
session_start();
if(!isset($_SERVER['PHP_AUTH_USER']) )
{
echo "你未登录。";
Header("WWW-Authenticate: Basic realm=$pagename");
Header("HTTP/1.0 401 Unauthorized");
exit;
}
$name =$_SERVER['PHP_AUTH_USER'] ;
$pass = $_SERVER['PHP_AUTH_PW'] ;
// 连接,选择数据库
$connect = pg_connect ("host=localhost dbname=XXX user=XXX")
or die('Could not connect: ' . pg_last_error());
// 执行 SQL 查询login表(用户consumer为主键,不能有重复值,grade为用户权限,
$result = pg_query($connect,"SELECT consumer,pwd,grade
FROM tablename WHERE consumer like '$name' and pwd like '$pass' ")
or die('Query failed: ' . pg_last_error());
//如果认证失败,就清空验证数据,要求重新输入。
//成功的话,提取用户权限grade给全局变量$_SESSION['grade']
$amount = pg_numrows($result);
if($amount == 0) {
echo "登录失败,请正确输入用户名和密码。";
Header("WWW-Authenticate: Basic realm=$pagename");
Header("HTTP/1.0 401 Unauthorized");
exit;
}
else {
echo "你已登录";
$_SESSION['grade']=pg_result($result,0,"grade");
if ($_SESSION['grade']<$grade)
{
echo ",但无权查看此页。";
exit;
}
}
// 释放结果集
pg_free_result($result);
// 关闭连接
pg_close($connect);
//结束函数showsql_field
//函数login1()结束
}
//类login的结束
}
?>
发现这个代码有一个不足,即每次验证都须调用数据库,大家可将调用数据库部分放入第一个IF语句。不过这样一来,在某些页面将降低安全性。
[ 本帖最后由 zhuoli76 于 2007-4-15 19:25 编辑 ]
//用途:
//定义一个类login,判断访问者是否登录或是否有权查看此页面,否则要求验证。如用户登录,就将用
//户名、密码和权限将会放在全局变量$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_USER']和
// $_SESSION['grade']中。
//调用方法:
//在每个需验证身份和权限的网页前加如下代码
//<?php $pagename ="xxxCOM";
//$grade=X;
//include 'login.inc';
//$thisdo =new login;
//$thisdo->login1($grade,$pagename ); ?>
//运行环境:
//php4.0以上,数据库为postgresql,数据表中有一表示用户权限的数字列
//编写人:江西吉水zhuoli76
//定义类login
class login{
//定义函数login1,从数据库中提取用户的管理权限(0至5),5为管理员。
//需要先设定$grade(页面所需权限),$pagename(页面名称)
function login1($grade,$pagename){
session_start();
if(!isset($_SERVER['PHP_AUTH_USER']) )
{
echo "你未登录。";
Header("WWW-Authenticate: Basic realm=$pagename");
Header("HTTP/1.0 401 Unauthorized");
exit;
}
$name =$_SERVER['PHP_AUTH_USER'] ;
$pass = $_SERVER['PHP_AUTH_PW'] ;
// 连接,选择数据库
$connect = pg_connect ("host=localhost dbname=XXX user=XXX")
or die('Could not connect: ' . pg_last_error());
// 执行 SQL 查询login表(用户consumer为主键,不能有重复值,grade为用户权限,
$result = pg_query($connect,"SELECT consumer,pwd,grade
FROM tablename WHERE consumer like '$name' and pwd like '$pass' ")
or die('Query failed: ' . pg_last_error());
//如果认证失败,就清空验证数据,要求重新输入。
//成功的话,提取用户权限grade给全局变量$_SESSION['grade']
$amount = pg_numrows($result);
if($amount == 0) {
echo "登录失败,请正确输入用户名和密码。";
Header("WWW-Authenticate: Basic realm=$pagename");
Header("HTTP/1.0 401 Unauthorized");
exit;
}
else {
echo "你已登录";
$_SESSION['grade']=pg_result($result,0,"grade");
if ($_SESSION['grade']<$grade)
{
echo ",但无权查看此页。";
exit;
}
}
// 释放结果集
pg_free_result($result);
// 关闭连接
pg_close($connect);
//结束函数showsql_field
//函数login1()结束
}
//类login的结束
}
?>
发现这个代码有一个不足,即每次验证都须调用数据库,大家可将调用数据库部分放入第一个IF语句。不过这样一来,在某些页面将降低安全性。
[ 本帖最后由 zhuoli76 于 2007-4-15 19:25 编辑 ]
作者: zhuoli76 发布时间: 2007-04-14
;P 支持 最近也向学PSQL
作者: edwardhey 发布时间: 2007-04-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28