yajra - La página de inicio de sesión de autenticación no funciona con PHP y Oracle en Apache/Windows 2008
lumen oracle connection (3)
No sé sobre el resto, pero debes agregar session_start (); a la parte superior de tu página php. Esto debería ser lo primero en cada página en la que lleve sus sesiones. Normalmente lo pongo justo al lado de la etiqueta así:
<?php session_start();
...
[ACTUALIZACIÓN: Resuelto: Gracias a todos. Vea el código aquí: http://pastebin.com/1fJmXeG2] Agradezco enormemente cualquier ayuda que pueda obtener sobre este problema. Tenemos una página de inicio de sesión en nuestro sitio que se ejecuta en un antiguo servidor Linux que utiliza Apache 1 y PHP 4. Queremos moverlo a un nuevo servidor de Windows 2008 (64 bits) ... así que instalé Apache 2.25 y PHP 5.4 en el nuevo servidor. También habilité OCI8 conectándose a una base de datos Oracle 11g. Moví los archivos para la página de inicio de sesión al nuevo servidor y no funcionan. Lo que sucede es que la página no ejecuta el script y simplemente lo reenvía al index.php en lugar de redirigirlo para indexar php con la respuesta adecuada. Por supuesto, había algún lenguaje obsoleto que actualicé en el script PHP, pero todavía no funciona. Soy un novato completo, así que no estoy seguro de si es un problema con el script o un problema con la configuración de PHP. Sé que puedo conectarme a la base de datos, ya que hice una página de prueba para hacerlo. Por favor, ayúdame si puedes ... Estoy realmente desesperado. El siguiente es el código para mi página de autorización:
<?php session_start();
// Begin or continue session by registering variables
$_SESSION[''USER_ID''] = ''USER_ID'';
$_SESSION[''PASSWORD''] = ''PASSWORD'';
$_SESSION[''FIRST''] = ''FIRST'';
$_SESSION[''LAST''] = ''LAST'';
$_SESSION[''ACCESS_KEY''] = ''ACCESS_KEY'';
$_SESSION[''conn''] = ''conn'';
$_SESSION[''BEENHERE''] = ''BEENHERE'';
$_SESSION[''CUSTOMER_NAME''] = ''CUSTOMER_NAME'';
$_SESSION[''WAREHOUSING''] = ''WAREHOUSING'';
$_SESSION[''TRANSPORTATION''] = ''TRANSPORTATION'';
$_SESSION[''MYACCOUNT''] = ''MYACCOUNT'';
// Set Environment Variables
$SYS_DBUSER = "*****";
$SYS_DBPASSWORD = "*****";
$SYS_DB = "*****";
// Begin Authorization Routine
if ( (!isset($USER_ID)) && (!isset($PASSWORD)) )
{
echo ''<html>'';
echo ''<head>'';
echo ''<title> Customer Access - Login</title>'';
echo ''<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'';
echo ''</head>'';
echo ''<body bgcolor="#FFFFFF" text="#000000">'';
echo ''<div align="center">'';
echo ''<p><img src="../images/logocir3.gif" width="120" height="123"> </p>'';
echo ''<p><b><font size="5" color="#0000FF" face="Arial, Helvetica, sans-serif">The '';
echo ''The Company</font></b></p>'';
echo ''<p><font size="4" color="#0000FF" face="Arial, Helvetica, sans-serif"><b><i>Customer Access</i></b></font></p>'';
echo ''<form name="form1" method="post" action="index.php">'';
echo ''<p> <font size="3" face="Arial, Helvetica, sans-serif">Username:</font> '';
echo ''<input type="text" name="USER_ID" maxlength="15">'';
echo ''</p>'';
echo ''<p><font size="3" face="Arial, Helvetica, sans-serif">Password: </font> '';
echo ''<input type="PASSWORD" name="PASSWORD" maxlength="15">'';
echo ''</p>'';
echo ''<p><input type="submit" name="Submit" value="Login"></p>'';
echo ''</form>'';
echo ''<p> </p>'';
echo ''</div>'';
echo ''</body>'';
echo ''</html>'';
exit;
}
elseif ( ($BEENHERE == 1) && (isset($FIRST)) && (isset($PASSWORD)) && (isset($ACCESS_KEY)) && (isset($USER_ID)) && (isset($LAST)) && (isset($conn)) && (isset($CUSTOMER_NAME)) )
{
return (TRUE);
}
else
{
// Connect to database
unset($conn);
$conn = oci_connect($SYS_DBUSER,$SYS_DBPASSWORD,$SYS_DB);
// Generate sql statement
$loginsql = oci_parse($conn,"SELECT FIRST_NAME,LAST_NAME,CUSTOMER_NAME,ACCESS_KEY,TRANSPORTATION,WAREHOUSING,MYACCOUNT FROM WEB_USERS WHERE USER_ID = SUBSTR(UPPER(''$USER_ID''),1,15) AND PASSWORD = SUBSTR(UPPER(''$PASSWORD''),1,30) AND ENABLED = ''Y''");
// Execute statement
oci_execute($loginsql,OCI_NO_AUTO_COMMIT);
// Retrieve number of rows for authentication
$nrows = oci_fetch_all($loginsql,$results);
// Database Authenticate
if ( $nrows != 1 )
{
// Display if login fails
unset($USER_ID);
unset($PASSWORD);
unset($FIRST);
unset($LAST);
unset($ACCESS_KEY);
unset($conn);
unset($BEENHERE);
unset($CUSTOMER_NAME);
unset($WAREHOUSING);
unset($TRANSPORTATION);
unset($MYACCOUNT);
echo "<H1>Login Failure - Please Check Your Password AND/OR Username</H1><BR>";
echo "<A HREF=/"$PHP_SELF/"><H3>Try Again</H3></A>";
// Close used resources
oci_free_statement($loginsql);
oci_close($conn);
exit;
}
else
{
// Assign login information to global variables
unset($FIRST);
unset($LAST);
unset($ACCESS_KEY);
unset($BEENHERE);
unset($CUSTOMER_NAME);
unset($WAREHOUSING);
unset($TRANSPORTATION);
unset($MYACCOUNT);
$FIRST = $results[''FIRST_NAME''][0];
$LAST = $results[''LAST_NAME''][0];
$CUSTOMER_NAME = $results[''CUSTOMER_NAME''][0];
$ACCESS_KEY = $results[''ACCESS_KEY''][0];
$TRANSPORTATION = $results[''TRANSPORTATION''][0];
$WAREHOUSING = $results[''WAREHOUSING''][0];
$MYACCOUNT = $results[''MYACCOUNT''][0];
$BEENHERE = 1;
// Close used resources
oci_free_statement($loginsql);
oci_close($conn);
}
}
?>
Aquí están mis configuraciones de php en un archivo png: http://i.imgur.com/7c8BzZG.png?1
Desde PHP4, las variables de solicitud solo están disponibles a través de las matrices $ _GET (para solicitudes GET) y $ _POST (para solicitudes POST). Tienes que reescribir algo, comenzar con el giro
if ( (!isset($USER_ID)) && (!isset($PASSWORD)) )
dentro
if ( (!isset($_POST)) )
o
if ( (!array_key_exists(''USERID'', $_POST)) && (!array_key_exists(''PASSWORD'', $_POST)) )
Muchas cosas para arreglar en tu código:
Como dijo joemurphy, para verificar si el formulario ha sido enviado:
if (!isset($_POST)) {....}
No use muchas declaraciones de
echo
para mostrar HTML. Cierre su etiqueta PHP (?>
) Y simplemente envíe el código HTML como de costumbre. Luego, cuando haya terminado con el HTML, agregue una etiqueta de apertura de PHP (<php
) y continúe con su código PHP.Verifique los valores en
$_SESSION
conif (isset($_SESSION[''USER_ID''])){...}
Si necesita un valor específico:
if (isset($_SESSION[''USER_ID'']) && $_SESSION[''USER_ID''] == 1){...}
No necesita establecer valores ficticios para inicializarlos en sesión o desarmarlos antes de configurarlos. Configúrelos solo cuando tenga los valores adecuados para ellos, luego desactívelos al cerrar la sesión. Por lo tanto, elimine la sección "Iniciar o continuar sesión registrando variables".