problemas con session_start() (CERRADO)

Iniciado por Zeroql, 10 Junio 2011, 01:02 AM

0 Miembros y 1 Visitante están viendo este tema.

Zeroql

Buenas, muchachos como estan,
bueno tengo este code:

validacion de usuarios

Código (php) [Seleccionar]

<?php session_start();
 
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','root','')or die ('Ha fallado la conexi&oacute;n: '.mysql_error());
mysql_select_db('agsiscom')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
 
 
//Caracteres no permitidos 
function quitar($mensaje)
{
    
$nopermitidos = array("'",'\\','<','>',"\"");
    
$mensaje str_replace($nopermitidos""$mensaje);
    return 
$mensaje;
}     
 
 
if(
trim($HTTP_POST_VARS["user"]) != "" && trim($HTTP_POST_VARS["pass"]) != "")
{
    
// Puedes utilizar la funcion para eliminar algun caracter en especifico
    //$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
    //$password = $HTTP_POST_VARS["password"];
  
    // o puedes convertir los a su entidad HTML aplicable con htmlentities
    
$usuario strtolower(htmlentities($HTTP_POST_VARS["user"], ENT_QUOTES));   
    
$password $HTTP_POST_VARS["pass"];
 
    
$resultado mysql_query('SELECT nuser, pass FROM users WHERE nuser=\''.$usuario.'\'');
    if(
$rowmysql_fetch_array($resultado)){
        if(
$row["pass"] == $password){
 
$_SESSION["k_username"] = $row['user'];
$_SESSION["k_typeuser"]=$row['type'];
?>

           <script language="javascript">
alert("Usuario identificado correctamente");
location.href="admin.php";
</script>
           <?php
        
}else{
            
?>

           <script language="javascript">
alert("Contraseña incorrecta");
location.href="index.php";
</script>
           <?php
        
}
    }else{
        
?>

           <script language="javascript">
alert("Usuario inexistente.");
location.href="index.php";
</script>
           <?php
    
}
    
mysql_free_result($result);
}else{
    
?>

           <script language="javascript">
alert("Debe espeficicar un usuario y una contraseña");
location.href="index.php";
</script>
           <?php
}
mysql_close();
?>



admin.php

Código (php) [Seleccionar]

<?php session_start();
if ($_SESSION['k_username']) {
if ($_SESSION["k_typeuser"]=='admin'){
$mcount="adm/counts.php";
$mproducts="adm/products.php";
$mlogout="logout.php";
$moferts="adm/oferts.php";
$mnews="adm/news.php";
$resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>
       <p class=\"color1\">Por favor escoja una de las siguientes operaciones a realizar.</p>
       <p class=\"color1\">&nbsp;</p>
<p class=\"color1\"><a href="adm/news.php">Agregar novedades</a></p>
<p class=\"color1\"><a href="adm/offerts.php">Modificar ofertas</a></p>
<p class=\"color1\"><a href="adm/products.php">Administrar productos</a></p>
<p class=\"color1\"><a href="adm/counts.php">Modificar cuentas</a></p>
<p class=\"color1\"><a href="mail.agsiscom.com">Ver correo electronico</a></p>'
;
} else{
$mcount="mensaje();";
$mproducts="mensaje();";
$mlogout="mensaje();";
$moferts="mensaje();";
$mnews="mensaje();";
$resultsession="<h2>Sesion incorrecta!</h2>
       <p class=\"color1\">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
       <p class=\"color1\">Por favor cierre la sesi&oacute;n actual y a continuaci&oacute;n entre com una cuenta de administrador</p>
       <p class=\"color1\">&nbsp;</p>"
;
}
} else {
$mcount="mensaje();";
$mproducts="mensaje();";
$mlogout="mensaje();";
$moferts="mensaje();";
$mnews="mensaje();";
$resultsession="<h2>Debe iniciar sesion primero!</h2>
       <p class=\"color1\">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
       <p class=\"color1\">Para ello ingresa tu nombre de usuario y contraseña en el formulario de abajo.</p>
       <p class=\"color1\">&nbsp;</p><article class=\"col2 pad_left1\">
       <h2>Inicio de sesion</h2>
       <form id=\"ContactForm\"  name= \"login\" action=\"valida.php\" method=\"post\">
         <div>
             <div class=\"wrapper\"><br />
           </div>
             <div class=\"bg\">
               <input type=\"text\" name=\"user\" class=\"input3\"/>
             </div>
             Usuario:<br />
         </div>
           <div class=\"wrapper\">
             <div class=\"bg\">
               <input type=\"password\" name=\"pass\" class=\"input3\" />
             </div>
             Contrase&ntilde;a:<br />
           </div>
           <div class=\"wrapper\"><br/>
           </div>
           <input type=\"submit\" name=\"submit\" class=\"button2\" value=\"Entrar\" >
           <input type=\"reset\" name=\"clean\" class=\"button2\" value=\"limpiar\" onClick=\"cleanform\">
       </form>
     </article>"
;
}
?>



Bueno resulta que en admin.php no me esta tomando los datos de session_start();
me sale siempre es la ultimap arte del else.

me pueden decir que estoy haciendo mal????
o por que nome da???

saludos
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


Shell Root

Que quieres decir con,
Código (php) [Seleccionar]
if ($_SESSION['k_username']) {
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

WHK

#2
Hola, en ves de usar $HTTP_POST_VARS utiliza $_POST porque en algunas configuraciones de servidores dan problemas con superglobales antiguas.

Después si aun no resulta prueba poniendo print_r($_SESSION) al principio del script después de session_start() para que puedas ver si es la sesión o tu script el que está fallando.

Yo apuesto a que el problema está cuando declara el valor, lo mas probable es que no esté declarando bién el nombre de usuario.

Código (php) [Seleccionar]
//Caracteres no permitidos
function quitar($mensaje)
{
   $nopermitidos = array("'",'\\','<','>',"\"");
   $mensaje = str_replace($nopermitidos, "", $mensaje);
   return $mensaje;
}  


Que tal si mi nombre de usuario tiene una comilla como por ejemplo marco's
para eso ya exste una función llamada mysql_real_escape_string(); además no necesitas escapar comillas dentro de la query, puedes usar comillas dobles:
Código (php) [Seleccionar]
$resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser="'.mysql_real_escape_string($_POST['user']).'" limit 1');

y htmlentities no te va a salvar de una inyección sql como los saltos de linea y retorno de carácter como el \x1a y el \x0d, para eso está el mysql real escape string, además mysql no es case sensitive asi que está demás el strtolower().

El limit 1 se pone siempre por costumbre para que el sistema funcione mejor debido a que te daría problemas si hay dos registros con el mismo nombre por algún motivo como por ejemplo migración de base de datos.

Código (php) [Seleccionar]
mysql_free_result($result);
Según tu script es "resultado" no "result"

La próxima ves intenta por favor no escribir los títulos de mensajes con mayusculas porque casi me dejaste sordo.

Saludos.

Zeroql

WHK gracias por tu aporte, mejore algunas cositas, pero te cuento que use esta misma funcion de session_start en otr proyecto y funciona de maravilla, realmente me extraña el saber por k no funciona bien en esta pagina.

esta tal cual el proyecto anterior.
al igual mejore algunas de tus recomendaciones y no funciona bien.

PD: ya arregle el titulo, jeje que pena me pase con el grito. no me habia dado cuenta que estaba ne mayus xD

saludos
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


WHK

A mi me ha pasado que en algunas veces te equibocas de codificación de archivo y aparece un pequeño carácter raro al comienzo de tu script y esto se debe a que este carácter define si tu script está escrito en utf-8 o no, en ese caso puede no estar haciendo efecto el session_start() ya que hay que recordar que envía un header al cliente cosa que no puede hacer si ya se ha enviado buffer antes.

Tienes los errores habilitados? error_reporting(all)

Zeroql

eso mismo estaba mirando yo en otros post. uso dreamweaver para esto pero mejor no me confio y lo paso a otro codificador a ver si es eso...
gracias estare avisando que sucede
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


WHK

#6
Ya encontré el error:
Código (php) [Seleccionar]
$_SESSION["k_typeuser"]=$row['type'];

No hay columna type ya que en tu query de sql solamente seleccionaste user y pass:
Código (php) [Seleccionar]
$resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser=\''.$usuario.'\'');

Lo solucionas seleccionando todo con * y ya.
Hize un par de arreglos en tu script porque le encontré como 3 errores mas como por ejemplo lo del free_result y un xss en :
Código (php) [Seleccionar]
$resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>

En ese caso se usa htmlspecialchars.

Código (php) [Seleccionar]
<?php
session_start
();

/* Login */
if(!$handle_sql mysql_connect('localhost','root',''))
die('Ha fallado la conexi&oacute;n');
if(!
mysql_select_db('agsiscom'))
die('Error al seleccionar la Base de Datos');
 
if(isset(
$_POST['user']) and isset($_POST['pass'])){
$resultado mysql_query('select * from users where nuser = "'.mysql_real_escape_string($_POST['user']).'" limit 1');
if($row mysql_fetch_array($resultadoMYSQL_ASSOC)){
@mysql_free_result($resultado);
if($row['pass'] == $_POST['pass']){
$_SESSION['k_username'] = $row['user'];
$_SESSION['k_typeuser'] = $row['type']; /* !!! select * entrega type */
header('location: '.str_replace(array("\x0d""\x0a"), ''$_SERVER['PHP_SELF']));
}else
$status['error'] = 'Contrase&ntilde;a incorrecta.';
}else
$status['error'] = 'Usuario inexistente.';
}
mysql_close();

/* Start content */
if($_SESSION['k_username']){
if($_SESSION["k_typeuser"] == 'admin'){
?>

<h2>Sesion: <?php echo htmlspecialchars($_SESSION['k_username'], ENT_QUOTES); ?>!</h2>
<p class="color1">Por favor escoja una de las siguientes operaciones a realizar.</p>
<p class="color1">&nbsp;</p>
<p class="color1"><a href="news.php">Agregar novedades</a></p>
<p class="color1"><a href="offerts.php">Modificar ofertas</a></p>
<p class="color1"><a href="products.php">Administrar productos</a></p>
<p class="color1"><a href="counts.php">Modificar cuentas</a></p>
<p class="color1"><a target="_blank" href="http://mail.agsiscom.com/">Ver correo electronico</a></p>
<?php
}else{
?>

<h2>Sesion incorrecta!</h2>
<p class="color1">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
<p class="color1">Por favor cierre la sesi&oacute;n actual y a continuaci&oacute;n entre com una cuenta de administrador</p>
<?php
}
}else{
?>

<h2>Debe iniciar sesion primero!</h2>
<p class="color1">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
<p class="color1">Para ello ingresa tu nombre de usuario y contrase&ntilde;a en el formulario de abajo.</p>
<p class="color1">&nbsp;</p><article class="col2 pad_left1">
<h2>Inicio de sesion</h2>
<form id="ContactForm" name= "login" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<div>
<div class="wrapper"><br /></div>
<div class="bg">
<input type="text" name="user" class="input3"/>
</div>
Usuario:<br />
</div>
<div class="wrapper">
<div class="bg">
<input type="password" name="pass" class="input3" />
</div>
Contrase&ntilde;a:<br />
</div>
<div class="wrapper"><br/></div>
<input type="submit" name="submit" class="button2" value="Entrar" >
<input type="reset" name="clean" class="button2" value="limpiar" onClick="cleanform">
</form>
<?php
}
?>


Saludos.

Zeroql

oye muchas gracias!!!!! xD
estaba mirando lo del sistema utf-8 y aun asi no me daba, voy a probar con tu solucion,
aun asi te agradezco enormemente...
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


Zeroql

WHK acabo de probar tu solucion y no me trajo ningun resultado!!!

el problema es que ahora estoy pensado que es el sistema de uso para probaro,  uso appserv 2.5.5 con MySQL Database Version 5.0.16 y phpMyAdmin Database Manager Version 2.6.4-pl4

tiene que ver esto?

por que ya pase todos los archivos de la pagina a utf-8 muchos estaban en ANSI.

la verdad esto es ya molesto que no funcione, acabo de correr un archivo anterior donde use esto mismo y funciona de maravilla!!!!

AYUDA!!!!!!
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


WHK