Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Zeroql en 10 Junio 2011, 01:02 AM

Título: problemas con session_start() (CERRADO)
Publicado por: Zeroql en 10 Junio 2011, 01:02 AM
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
Título: Re: PROBLEMAS CON SESSION_START()
Publicado por: Shell Root en 10 Junio 2011, 02:25 AM
Que quieres decir con,
Código (php) [Seleccionar]
if ($_SESSION['k_username']) {
Título: Re: PROBLEMAS CON SESSION_START()
Publicado por: WHK en 10 Junio 2011, 03:45 AM
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.
Título: Re: problemas con session_start()
Publicado por: Zeroql en 10 Junio 2011, 03:56 AM
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
Título: Re: problemas con session_start()
Publicado por: WHK en 10 Junio 2011, 04:06 AM
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)
Título: Re: problemas con session_start()
Publicado por: Zeroql en 10 Junio 2011, 04:11 AM
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
Título: Re: problemas con session_start()
Publicado por: WHK en 10 Junio 2011, 04:29 AM
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.
Título: Re: problemas con session_start()
Publicado por: Zeroql en 10 Junio 2011, 18:34 PM
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...
Título: Re: problemas con session_start()
Publicado por: Zeroql en 10 Junio 2011, 20:30 PM
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!!!!!!
Título: Re: problemas con session_start()
Publicado por: WHK en 10 Junio 2011, 21:28 PM
instala xampp
Título: Re: problemas con session_start()
Publicado por: Zeroql en 12 Junio 2011, 15:12 PM
Buenas. bueno ya instale el xampp, gracias por este server, lo veo mas completo

pero ahora tengo estos problemas:

1 cuando ejecuto el archivo pagina el que contiene lo del formulario y eso me dice esto:

Notice: Undefined index: k_username in C:\xampp\htdocs\agsiscom\admin.php on line 2

y ahi tengo esto:

Código (php) [Seleccionar]

<?php session_start();
if ($_SESSION['k_username']) {
if ($_SESSION["k_typeuser"]=='admin'){


lo otro es que cuando salgo a validar los usuarios me salta el siguiente error:

Código (php) [Seleccionar]

$_SESSION["k_username"] = $row['user'];


que sucede???
Título: Re: problemas con session_start() (CERRADO)
Publicado por: Zeroql en 12 Junio 2011, 15:20 PM
YA arregle el problema!!!
estaba mal definido lo siguiente:

$_SESSION["k_username"] = $row['user'];

deberia ser:

$_SESSION["k_username"] = $row['nuser'];

al igual tambien tenia errores de server ya tampoco me reconocia algunas lineas y no pasaba del sistema de conexion bien.

GRACIAS A TODOS POR SU COLABORACION!!!