Foro de elhacker.net

Programación => 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
  1. <?php session_start();
  2.  
  3. //datos para establecer la conexion con la base de mysql.
  4. mysql_connect('localhost','root','')or die ('Ha fallado la conexi&oacute;n: '.mysql_error());
  5. mysql_select_db('agsiscom')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
  6.  
  7. //Caracteres no permitidos
  8. function quitar($mensaje)
  9. {
  10.    $nopermitidos = array("'",'\\','<','>',"\"");
  11.    $mensaje = str_replace($nopermitidos, "", $mensaje);
  12.    return $mensaje;
  13. }    
  14.  
  15.  
  16. if(trim($HTTP_POST_VARS["user"]) != "" && trim($HTTP_POST_VARS["pass"]) != "")
  17. {
  18.    // Puedes utilizar la funcion para eliminar algun caracter en especifico
  19.    //$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
  20.    //$password = $HTTP_POST_VARS["password"];
  21.  
  22.    // o puedes convertir los a su entidad HTML aplicable con htmlentities
  23.    $usuario = strtolower(htmlentities($HTTP_POST_VARS["user"], ENT_QUOTES));  
  24.    $password = $HTTP_POST_VARS["pass"];
  25.  
  26.    $resultado = mysql_query('SELECT nuser, pass FROM users WHERE nuser=\''.$usuario.'\'');
  27.    if($row= mysql_fetch_array($resultado)){
  28.        if($row["pass"] == $password){
  29. $_SESSION["k_username"] = $row['user'];
  30. $_SESSION["k_typeuser"]=$row['type'];
  31. ?>
  32.            <script language="javascript">
  33. alert("Usuario identificado correctamente");
  34. location.href="admin.php";
  35. </script>
  36.            <?php
  37.        }else{
  38.            ?>
  39.            <script language="javascript">
  40. alert("Contraseña incorrecta");
  41. location.href="index.php";
  42. </script>
  43.            <?php
  44.        }
  45.    }else{
  46.        ?>
  47.            <script language="javascript">
  48. alert("Usuario inexistente.");
  49. location.href="index.php";
  50. </script>
  51.            <?php
  52.    }
  53.    mysql_free_result($result);
  54. }else{
  55.    ?>
  56.            <script language="javascript">
  57. alert("Debe espeficicar un usuario y una contraseña");
  58. location.href="index.php";
  59. </script>
  60.            <?php
  61. }
  62. ?>
  63.  

admin.php

Código
  1. <?php session_start();
  2. if ($_SESSION['k_username']) {
  3. if ($_SESSION["k_typeuser"]=='admin'){
  4. $mcount="adm/counts.php";
  5. $mproducts="adm/products.php";
  6. $mlogout="logout.php";
  7. $moferts="adm/oferts.php";
  8. $mnews="adm/news.php";
  9. $resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>
  10.       <p class=\"color1\">Por favor escoja una de las siguientes operaciones a realizar.</p>
  11.       <p class=\"color1\">&nbsp;</p>
  12. <p class=\"color1\"><a href="adm/news.php">Agregar novedades</a></p>
  13. <p class=\"color1\"><a href="adm/offerts.php">Modificar ofertas</a></p>
  14. <p class=\"color1\"><a href="adm/products.php">Administrar productos</a></p>
  15. <p class=\"color1\"><a href="adm/counts.php">Modificar cuentas</a></p>
  16. <p class=\"color1\"><a href="mail.agsiscom.com">Ver correo electronico</a></p>';
  17. } else{
  18. $mcount="mensaje();";
  19. $mproducts="mensaje();";
  20. $mlogout="mensaje();";
  21. $moferts="mensaje();";
  22. $mnews="mensaje();";
  23. $resultsession="<h2>Sesion incorrecta!</h2>
  24.       <p class=\"color1\">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
  25.       <p class=\"color1\">Por favor cierre la sesi&oacute;n actual y a continuaci&oacute;n entre com una cuenta de administrador</p>
  26.       <p class=\"color1\">&nbsp;</p>";
  27. }
  28. } else {
  29. $mcount="mensaje();";
  30. $mproducts="mensaje();";
  31. $mlogout="mensaje();";
  32. $moferts="mensaje();";
  33. $mnews="mensaje();";
  34. $resultsession="<h2>Debe iniciar sesion primero!</h2>
  35.       <p class=\"color1\">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
  36.       <p class=\"color1\">Para ello ingresa tu nombre de usuario y contraseña en el formulario de abajo.</p>
  37.       <p class=\"color1\">&nbsp;</p><article class=\"col2 pad_left1\">
  38.       <h2>Inicio de sesion</h2>
  39.       <form id=\"ContactForm\"  name= \"login\" action=\"valida.php\" method=\"post\">
  40.         <div>
  41.             <div class=\"wrapper\"><br />
  42.           </div>
  43.             <div class=\"bg\">
  44.               <input type=\"text\" name=\"user\" class=\"input3\"/>
  45.             </div>
  46.             Usuario:<br />
  47.         </div>
  48.           <div class=\"wrapper\">
  49.             <div class=\"bg\">
  50.               <input type=\"password\" name=\"pass\" class=\"input3\" />
  51.             </div>
  52.             Contrase&ntilde;a:<br />
  53.           </div>
  54.           <div class=\"wrapper\"><br/>
  55.           </div>
  56.           <input type=\"submit\" name=\"submit\" class=\"button2\" value=\"Entrar\" >
  57.           <input type=\"reset\" name=\"clean\" class=\"button2\" value=\"limpiar\" onClick=\"cleanform\">
  58.       </form>
  59.     </article>";
  60. }
  61. ?>
  62.  

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
  1. 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
  1. //Caracteres no permitidos
  2. function quitar($mensaje)
  3. {
  4.    $nopermitidos = array("'",'\\','<','>',"\"");
  5.    $mensaje = str_replace($nopermitidos, "", $mensaje);
  6.    return $mensaje;
  7. }  

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
  1. $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
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
  1. $_SESSION["k_typeuser"]=$row['type'];

No hay columna type ya que en tu query de sql solamente seleccionaste user y pass:
Código
  1. $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
  1. $resultsession='<h2>Sesion:' .$_SESSION['k_username']. '!</h2>

En ese caso se usa htmlspecialchars.

Código
  1. <?php
  2.  
  3. /* Login */
  4. if(!$handle_sql = mysql_connect('localhost','root',''))
  5. die('Ha fallado la conexi&oacute;n');
  6. if(!mysql_select_db('agsiscom'))
  7. die('Error al seleccionar la Base de Datos');
  8.  
  9. if(isset($_POST['user']) and isset($_POST['pass'])){
  10. $resultado = mysql_query('select * from users where nuser = "'.mysql_real_escape_string($_POST['user']).'" limit 1');
  11. if($row = mysql_fetch_array($resultado, MYSQL_ASSOC)){
  12. @mysql_free_result($resultado);
  13. if($row['pass'] == $_POST['pass']){
  14. $_SESSION['k_username'] = $row['user'];
  15. $_SESSION['k_typeuser'] = $row['type']; /* !!! select * entrega type */
  16. header('location: '.str_replace(array("\x0d", "\x0a"), '', $_SERVER['PHP_SELF']));
  17. }else
  18. $status['error'] = 'Contrase&ntilde;a incorrecta.';
  19. }else
  20. $status['error'] = 'Usuario inexistente.';
  21. }
  22.  
  23. /* Start content */
  24. if($_SESSION['k_username']){
  25. if($_SESSION["k_typeuser"] == 'admin'){
  26. ?>
  27. <h2>Sesion: <?php echo htmlspecialchars($_SESSION['k_username'], ENT_QUOTES); ?>!</h2>
  28. <p class="color1">Por favor escoja una de las siguientes operaciones a realizar.</p>
  29. <p class="color1">&nbsp;</p>
  30. <p class="color1"><a href="news.php">Agregar novedades</a></p>
  31. <p class="color1"><a href="offerts.php">Modificar ofertas</a></p>
  32. <p class="color1"><a href="products.php">Administrar productos</a></p>
  33. <p class="color1"><a href="counts.php">Modificar cuentas</a></p>
  34. <p class="color1"><a target="_blank" href="http://mail.agsiscom.com/">Ver correo electronico</a></p>
  35. <?php
  36. }else{
  37. ?>
  38. <h2>Sesion incorrecta!</h2>
  39. <p class="color1">Lo sentimos, la sesion actual no tiene permisos para acceder a esta area de la pagina.</p>
  40. <p class="color1">Por favor cierre la sesi&oacute;n actual y a continuaci&oacute;n entre com una cuenta de administrador</p>
  41. <?php
  42. }
  43. }else{
  44. ?>
  45. <h2>Debe iniciar sesion primero!</h2>
  46. <p class="color1">Para acceder a la administracion de productos,ofertas, cuentas y de la pagina en general debe iniciar sesion como administrador.</p>
  47. <p class="color1">Para ello ingresa tu nombre de usuario y contrase&ntilde;a en el formulario de abajo.</p>
  48. <p class="color1">&nbsp;</p><article class="col2 pad_left1">
  49. <h2>Inicio de sesion</h2>
  50. <form id="ContactForm" name= "login" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  51. <div>
  52. <div class="wrapper"><br /></div>
  53. <div class="bg">
  54. <input type="text" name="user" class="input3"/>
  55. </div>
  56. Usuario:<br />
  57. </div>
  58. <div class="wrapper">
  59. <div class="bg">
  60. <input type="password" name="pass" class="input3" />
  61. </div>
  62. Contrase&ntilde;a:<br />
  63. </div>
  64. <div class="wrapper"><br/></div>
  65. <input type="submit" name="submit" class="button2" value="Entrar" >
  66. <input type="reset" name="clean" class="button2" value="limpiar" onClick="cleanform">
  67. </form>
  68. <?php
  69. }
  70. ?>

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
  1. <?php session_start();
  2. if ($_SESSION['k_username']) {
  3. if ($_SESSION["k_typeuser"]=='admin'){
  4.  

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

Código
  1. $_SESSION["k_username"] = $row['user'];
  2.  

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!!!