En efecto el problema era del archivo .ini, por lo que opté por el segundo método propuesto por
cuija ya que el primero tiene la desventaja de que si activo session.auto_start = 1 no puedo usar objetos como variables de sesión. Me da gusto saber que de 8 foros en los que pedí ayuda, 1 (este) era en español y fue el único en donde obtuve una solución satisfactoria.
Mil Gracias
Un segundo problema que tengo es que estoy creando un sistema de administración de contenido, con una aplicación para ratificar usuarios y aunque los problemas relacionados con SESSION de mis otros scripts se resolvieron, este, aún no.
El problema radica en que cuando escribo el usuario y el password correctos no me redirige a la página correcta sino que se queda ahí, tan sólo desaparecen los datos y se queda el formulario. En cambio cuando meto algún dato incorrecto si me muestra el error.
A continuación puse todo el código y la estructura de la base de datos, también les puede servir para sus aplicaciones ya que es un ejemplo de un libro y según yo el código está bien, tal vez el problema es otra vez con el ini.
Espero puedan ayudarme, este es el código:
index.php---------------------------------------------------
Esta página es la portada para administrar el sitio de noticias.
Código PHP:
<html>
<head>
<title>Admin Menu</title>
</head>
<body>
<h1>Admin Menu</h1>
<ul>
<li>Writers - <a href = 'writer.php'>Add/Edit stories</a></li>
<li>Editors - <a href = 'publish.php'>Publish/Unpublish stories</a></li>
</ul>
</body>
</html>
writer.php---------------------------------------------------
Esta pagina permite editar las noticias.
Código PHP:
<?php
// writer.php Is the Interface for Writers to Manage Their Stories
include_once('include_fns.php');
if (!check_auth_user())
{
login_form();
}
else
{
$username = $_POST['username'];
$password = $_POST['password'];
$handle = db_connect();
$writer = get_writer_record($_SESSION['auth_user']);
echo '<p>Welcome, '.$writer['full_name'];
echo ' (<a href="logout.php">Logout</a>) (<a href="index.php">Menu</a>) (<a href="../">Public Site</a>) </p>';
echo '<p>';
$query = 'select * from stories where writer = \''.
$_SESSION['auth_user'].'\' order by created desc';
$result = $handle->query($query);
echo 'Your stories: ';
echo $result->num_rows;
echo ' (<a href="story.php">Add new</a>)';
echo '</p><br /><br />';
if ($result->num_rows)
{
echo '<table>';
echo '<tr><th>Headline</th><th>Page</th>';
echo '<th>Created</th><th>Last modified</th></tr>';
while ($stories = $result->fetch_assoc())
{
echo '<tr><td>';
echo $stories['headline'];
echo '</td><td>';
echo $stories['page'];
echo '</td><td>';
echo date('M d, H:i', $stories['created']);
echo '</td><td>';
echo date('M d, H:i', $stories['modified']);
echo '</td><td>';
if ($stories['published'])
{
echo '[Published '.date('M d, H:i', $stories['published']).']';
}
else
{
echo '[<a href="story.php?story='.$stories['id'].'">edit</a>] ';
echo '[<a href="delete_story.php?story='.$stories['id'].'">delete</a>] ';
}
echo '[<a href="keywords.php?story='.$stories['id'].'">keywords</a>]';
echo '</td></tr>';
}
echo '</table>';
}
}
?>
publish.php---------------------------------------------------
Esta pagina permite publicar noticias.
Código PHP:
<?php
include_once('include_fns.php');
if (!check_auth_user())
{
login_form();
}
else
{
$handle = db_connect();
$writer = get_writer_record($_SESSION['auth_user']);
echo '<p>Welcome, '.$writer['full_name'];
echo ' (<a href="logout.php">Logout</a>) (<a href="index.php">Menu</a>) (<a href="../">Public Site</a>) </p>';
$query = "select * from stories s, writer_permissions wp
where wp.writer = '{$_SESSION['auth_user']}' and
s.page = wp.page
order by modified desc";
$result = $handle->query($query);
echo '<h1>Editor admin</h1>';
echo '<table>';
echo '<tr><th>Headline</th><th>Last modified</th></tr>';
while ($story = $result->fetch_assoc())
{
echo '<tr><td>';
echo $story['headline'];
echo '</td><td>';
echo date('M d, H:i', $story['modified']);
echo '</td><td>';
if ($story[published])
{
echo '[<a href="unpublish_story.php?story='.$story['id'].'">unpublish</a>] ';
}
else
{
echo '[<a href="publish_story.php?story='.$story['id'].'">publish</a>] ';
echo '[<a href="delete_story.php?story='.$story['id'].'">delete</a>] ';
}
echo '[<a href="story.php?story='.$story['id'].'">edit</a>] ';
echo '</td></tr>';
}
echo '</table>';
}
?>
include_fns.php ---------------------------------------------------
Esta pagina llama a algunas funciones que permiten 1) conectarme con la base de datos y 2) autentificar usuarios (puede que ahí este el problema) sino esta en el .ini
Código PHP:
<?php
// All the include files for admin pages in the site
include_once('../db_fns.php');
include_once('user_auth_fns.php');
session_start();
?>
db_fns.php ---------------------------------------------------
Esta pagina contiene la función para conectarse a la base de datos.
Código PHP:
<?php
function db_connect()
{
$handle = new mysqli('localhost', 'content', 'password', 'content');
if (!$handle)
{
return false;
}
return $handle;
}
function get_writer_record($username)
{
$handle = db_connect();
$query = "select * from writers where username = '$username'";
$result = $handle->query($query);
return($result->fetch_assoc());
}
function get_story_record($story)
{
$handle = db_connect();
$query = "select * from stories where id = '$story'";
$result = $handle->query($query);
return($result->fetch_assoc());
}
function query_select($name, $query, $default='')
{
$handle = db_connect();
$result = $handle->query($query);
if (!$result)
{
return('');
}
$select = "<select name='$name'>";
$select .= '<option value=""';
if($default == '') $select .= ' selected ';
$select .= '>-- Choose --</option>';
for ($i=0; $i < $result->num_rows; $i++)
{
$option = $result->fetch_array();
$select .= "<option value='{$option[0]}'";
if ($option[0] == $default)
{
$select .= ' selected';
}
$select .= ">[{$option[0]}] {$option[1]}</option>";
}
$select .= "</select>\n";
return($select);
}
?>
Esta página contiene las funciones para autentificar a los usuarios.
user_auth_fns.php ------------------------------------------------ Código PHP:
<?php
function login($username, $password)
// check username and password with db
// if yes, return true
// else return false
{
// connect to db
$handle = db_connect();
if (!$handle)
return 0;
$result = $handle->query("select * from writers
where username='$username' and
password = SHA1('$password')");
if (!$result)
{
return 0;
}
if ($result->num_rows>0)
{
return 1;
}
else
{
return 0;
}
}
function check_auth_user()
// see if somebody is logged in and notify them if not
{
global $_SESSION;
if (isset($_SESSION['auth_user']))
{
return true;
}
else
{
return false;
}
}
function login_form()
{
?>
<form action='login.php' method='POST'>
<table border=0>
<tr>
<td>Username</td>
<td><input size='16' name='username'></td>
</tr>
<tr>
<td>Password</td>
<td><input size='16' type='password' name='password'></td>
</tr>
</table>
<input type='submit' value='Log in'>
</form>
<?php
}
function check_permission($username, $story)
// check user has permission to act on this story
{
// connect to db
$handle = db_connect();
if (!$handle)
return 0;
if(!$_SESSION['auth_user'])
return 0;
$result = $handle->query("select * from writer_permissions wp, stories s
where wp.writer = '{$_SESSION['auth_user']}' and
wp.page = s.page and
s.id = $story
");
if (!$result)
{
return 0;
}
if ($result->num_rows>0)
{
return 1;
}
else
{
return 0;
}
}
?>
login.php ------------------------------------------------
Esta página corre el script para accesar al CMS.´
Código PHP:
<?php
include_once('include_fns.php');
if ( (!isset($_REQUEST['username'])) || (!isset($_REQUEST['password'])) )
{
echo 'You must enter your username and password to proceed';
exit;
}
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
if (login($username, $password))
{
$_SESSION['auth_user'] = $username;
header('Location: '.$_SERVER['HTTP_REFERER']);
}
else
{
echo 'The password you entered is incorrect';
exit;
}
?>
Espero sirva de algo, gracias.