网络实验室

 找回密码
 注册账户
查看: 88982|回复: 0

一个基本的apache+php+psql网页登录验证的类源码

[复制链接]
无心的棋子 发表于 2007-6-30 15:24:39 | 显示全部楼层 |阅读模式
一个基本的apache+php+psql网页登录验证的类源码

<?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语句。不过这样一来,在某些页面将降低安全性。
您需要登录后才可以回帖 登录 | 注册账户

本版积分规则

黑屋|存档|手机|网络实验室 本站服务器由美国合租以及IDCLayer国际数据提供!!!

GMT+8, 2024-4-29 10:47 , Processed in 0.497115 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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