Que Tal juandedios...
Adjunto te envio un script que tengo en produccion... aunque yo utilizo el abtractor ADODB creo que te puede servir. Como veras lo tengo funcionando para Oracle, Postgres e Informix
La forma en que trabaja es la siguiente:
Desde el index.php valido si el usuario ingresa por primera vez a mi pagina (PHP_AUTH_USER) si no es asi hace el llamado a este script para validacion en la BD.
Debes tener en cuenta que la tabla donde tienes registrados los usuarios autorizados contenga la columna (atributo) "usr_pass char(32)"
Este script fue adaptado desde uno que publico Cluster en este foro
Código PHP:
<?php
session_start();
function login_error()
{
die;
}
if (!isset($PHP_AUTH_USER) || strlen($PHP_AUTH_USER) == 0)
{
header("WWW-Authenticate: Basic realm=\"Informaweb\"");
header("HTTP/1.0 401 Unauthorized");
//Result if user hits cancel button
login_error();
}
else
{
//check the login and password
if('=>test on login and password<=')
{
define ('ADODB_ASSOC_CASE',0);
define ('ADODB_FETCH_ASSOC',0);
include_once ('adodb/adodb.inc.php');
$base = "rsn";
$motor = trae_motor();
$usu = "informa";
$pass = "informa";
switch ($motor)
{
case "Oci8po":
$cstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$_SERVER["SERVER_ADDR"].")(PORT=1521)) (CONNECT_DATA=(SID=$base)))";
$db = ADONewConnection($motor);
$db->Connect($cstr, $usu, $pass);
break;
case "postgres":
$db = ADONewConnection('postgres7');
$connex="host=".$_SERVER["SERVER_ADDR"]." port=5432 dbname=rsn user=postgres";
$db->Connect($connex);
break;
default :
$dsn = "informix://informix@$INFORMIXSERVER/$base";
$db = ADONewConnection($dsn);
if (!$db) die($dns.' '.$db->ErrorMsg() . " " . "ABRIRBD ---> " . " " . $dsn);
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$db->CursorType=0;
break;
}
$sql = "select usr_pass from nue_usuario
where usuario = '$PHP_AUTH_USER'";
$qpass=$db->GetRow($sql);
if (count($qpass) > 0)
{ // Existe el usuario
if (strlen(trim($qpass['usr_pass'])) != 0) // Tiene Password Registrado
{
if ($qpass['usr_pass'] == md5($PHP_AUTH_PW))
{ // Password Ok
}
else
{ // Password Errado
header( "WWW-Authenticate: Basic realm=\"Informaweb\"");
header("HTTP/1.0 401 Unauthorized");
//Result if user does not give good login and pass
login_error();
}
}
else
{ // No tiene Password Registrado
if (strlen(trim($PHP_AUTH_PW)) == 0) // No Ingreso Password
{
header( "WWW-Authenticate: Basic realm=\"Informaweb\"");
header("HTTP/1.0 401 Unauthorized");
//Result if user does not give good login and pass
login_error();
}
else
{ // Ingreso Password
$pass = md5($PHP_AUTH_USER);
$rs = $db->Execute("Update nue_usuario set usr_pass = '$pass' WHERE usuario='$PHP_AUTH_USER'");
if (!$rs)
die;
?> <script> alert ("Su Calve Ha Sido Asignada\n No la olvide por favor");
</script>
<?
}
}
}
else
{ // No existe el usuario
header( "WWW-Authenticate: Basic realm=\"Informaweb\"");
header("HTTP/1.0 401 Unauthorized");
//Result if user does not give good login and pass
login_error();
}
}
else
{
//This re-asks three times the login and password.
header( "WWW-Authenticate: Basic realm=\"Test Authentication System\"");
header("HTTP/1.0 401 Unauthorized");
//Result if user does not give good login and pass
login_error();
}
}
function trae_motor()
{
if (strlen($motor) == 0)
{
if (file_exists("../logon.txt"))
{
$gestor = fopen("../logon.txt","r");
$a = 0;
while ($info_usuario = fscanf($gestor, "%s"))
{
list ($motor) = $info_usuario;
}
fclose($gestor);
}
else
$motor = "informix";
}
if (strlen($motor) == 0)
$motor = "informix";
return($motor);
}
?>
Un Saludo