Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Programación en general » Crear un cookie al verificar un usuario correcto (PHP) Responder al tema
Nuevo tema


Página 1 de 1  [ 9 mensajes ] 
 
Nota 2010-03-24 13:24 @600

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Crear un cookie al verificar un usuario correcto (PHP)
Hola.

Estoy haciendo un login en PHP. Éste utiliza un formulario para pedir usuario y password, si es correcto con la base de datos MySQL, éste debería crear una cookie con un valor llamado admin.

Acá el código del formulario:

Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
  1. <title>LOGIN PASS</title>
  2. <h1> Bienvenido idiota logeate o cagate</h1>
  3. <h1>INSERTA USER Y PASSWORD</h1>
  4.  
  5.    
  6.       <form action="" method="post">
  7.  
  8.       Usuario:<input type="text" name="usuario" size="20" maxlength="20" />
  9.  
  10.       <br />
  11.  
  12.       Password:<input type="password" name="password" size="10" maxlength="10" />
  13.    
  14.       <br />
  15.    
  16.       <input type="submit" value="Ingresar" />
  17.  
  18.       </form>
  19.  
  20. <?php
  21.  
  22.       mysql_connect('localhost','root','123')or die ('Ha fallado la conexi&oacute;n: '.mysql_error());
  23.  
  24.       mysql_select_db('test')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
  25.  
  26.       function quitar($mensaje)
  27.  
  28.       {
  29.           $nopermitidos = array("'",'\\','<','>',"\"");
  30.       $mensaje = str_replace($nopermitidos, "", $mensaje);
  31.     return $mensaje;
  32.  
  33.       }
  34.  if(trim($HTTP_POST_VARS["usuario"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
  35.       {
  36.           $usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));
  37.       $password = $HTTP_POST_VARS["password"];
  38.  
  39.                    $result = mysql_query("SELECT name,password FROM users WHERE name='$usuario'
  40.  
  41. AND password='$password' ");
  42.  
  43.           if($row = mysql_fetch_array($result)){
  44.          
  45.  
  46.               if($row["password"] == $password){
  47.                   $_SESSION["k_username"] = $row['usuario'];
  48.                  
  49.                   echo 'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
  50.               }else{
  51.                  echo 'Password incorrecto';
  52.               }
  53.       }else{
  54.              echo 'Usuario no existente en la base de datos';
  55.           }
  56.           mysql_free_result($result);
  57.       }else{
  58.           echo 'Debe especificar un usuario y password';
  59.  
  60.       }
  61.       mysql_close();
  62. ?>
  63.  


¿Alguien me podría explicar cómo creo la cookie cuando el logeo es exitoso?


Última edición por explorer el 2010-03-24 13:29 @604, editado 1 vez en total
Ortografía, tildes


Nota 2010-03-24 13:34 @607
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Crear un cookie al verificar un usuario correcto (PHP)
No sé la respuesta, pero veo que el código es vulnerable a una inyección de SQL. Ten mucho cuidado.

Más información en Bobby Tables.

_________________
JF^D Perl programming


Nota 2010-03-27 12:35 @566

Perlero Frecuente
Registrado: 2009-07-25 13:00 @583
Mensajes: 158
Re: Crear un cookie al verificar un usuario correcto (PHP)
Bueno, no me había dado cuenta que habías creado este post, de todo modos te doy la respuesta a tu problemita xD.

Primero que nada, no sé si sabes lo que estás haciendo, porque hablas de cookies y veo que utilizas sesiones, la diferencia de las cookies y las sesiones son que las sesiones se guardan en el servidor y las cookies la guarda el cliente.

Para generar una cookies necesitas usar la función setcookie()

Los parámetros son simples...
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
setcookie(nombre, valor, tiempo, ....)

Para que funcione, reemplazarías la línea 47 por esta:
Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
  1. setcookie("k_username",$row['usuario']);


Te creara una cookie llamada k_username, con el valor de $row['usuario'].


Otra cosa, no uses la función trim, que solo borrará los espacio que existen al principio y al final, lo recomendable es usar la función mysql_real_escape_string y también te protege contra inyecciones SQL...

Saludos.


Última edición por explorer el 2010-03-27 14:43 @655, editado 1 vez en total
Tildes


Nota 2010-03-27 14:29 @645

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Crear un cookie al verificar un usuario correcto (PHP)
Ok, gracias, como verás en PHP estoy dead. Ese código no es mío; lo saqué de un manual que vi en Internet; por eso no se nada de sesiones ni lo que hace el código, pero con el tiempo mejoraré xD


P.D.: PHP es más difícil que Perl.


Última edición por explorer el 2010-03-27 14:45 @656, editado 1 vez en total
Tildes


Nota 2010-03-27 15:08 @672
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Crear un cookie al verificar un usuario correcto (PHP)
erv-Z escribió:
Primero que nada, no sé si sabes lo que estás haciendo, porque hablas de cookies y veo que utilizas sesiones, la diferencia de las cookies y las sesiones son que las sesiones se guardan en el servidor y las cookies la guarda el cliente.

Perdona, pero esto no es (del todo) correcto.

* Sesión es una técnica por la cual controlamos la interacción de un sistema con un usuario, a lo largo de un tiempo.

* Una galleta (cookie) es un fichero que se guarda en el lado del cliente, por parte de los navegadores web, y por orden del servidor web.

Pero:

* Se puede controlar una sesión de usuario guardando toda la información en el lado del cliente, bien sea con galletas o guardándola de forma oculta en la página HTML, pero el uso de galletas no es obligatoria. Ni tampoco es obligatorio dejar la información de usuario en un lado u otro.

* Una galleta puede guardar cualquier información, no solo sesiones.

Sí que puedes usar galletas para controlar las sesiones, pero no puedes relacionar galletas y sesiones de esa forma.

Es como decir que para que un dentista me cure las muelas, tengo que ir en coche. Sí que puedo ir en coche, pero no es obligatorio. De hecho, no tiene nada que ver mi dentista con mi coche.

_________________
JF^D Perl programming


Nota 2010-03-27 15:43 @696

Perlero Frecuente
Registrado: 2009-07-25 13:00 @583
Mensajes: 158
Re: Crear un cookie al verificar un usuario correcto (PHP)
http://www.webtaller.com/construccion/l ... siones.php


Nota 2010-03-27 17:45 @781
Avatar de Usuario
Creador de Perl en Español
Registrado: 2003-10-15 16:52 @744
Ubicación: México
Mensajes: 1163
Re: Crear un cookie al verificar un usuario correcto (PHP)
erv-Z escribió:
http://www.webtaller.com/construccion/lenguajes/php/lessons/sesiones.php


Lo siento, pero la definición de lo que son sesiones en ese artículo también es incorrecta.

Básicamente una sesión es una técnica por medio de la cual mantienes una comunicación entre dos o más partes, independientemente de cómo decidas llevar a cabo eso.

Como el protocolo HTTP es en fundamento stateless, se acostumbra a iniciar una sesión para mantener la comunicación activa entre el cliente-servidor a través de los diferentes requests que se lleven a cabo.

Como indica Joaquín, no hay que confundir los términos.

_________________
Uriel Lizama Perl programmer fundador de Perl en Español


Nota 2010-03-27 18:38 @818

Perlero Frecuente
Registrado: 2009-07-25 13:00 @583
Mensajes: 158
Re: Crear un cookie al verificar un usuario correcto (PHP)
Bueno, a ver... no sé en qué me equivoqué o por qué me corrigen...

Las sesiones no se pueden manipular, se almacenan en el servidor y por lo tanto no puedes mirar, modificar, eliminar... Lo único que puedes hacer es llamar la sesión...

Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
  1. <?php
  2. session_start();
  3. echo session_save_path();
  4. ?>

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
$ php /var/www/a.php
/var/lib/php5


Citar:
* Se puede controlar una sesión de usuario guardando toda la información en el lado del cliente, bien sea con galletas o guardándola de forma oculta en la página HTML, pero el uso de galletas no es obligatoria. Ni tampoco es obligatorio dejar la información de usuario en un lado u otro.
Citar:

¿Cómo vas a controlar una sesión de un usuario guardando su información en el lado del cliente, si las sesiones no funcionan así? El cliente manda el nombre de la sesión y si existe dicha sesión el servidor le devuelve la información... La sesión se puede pedir ya sea vía GET o vía POST. Ej.:
Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
  1. <?php
  2. session_start();
  3. $var = 'Ejemplo';
  4. $_SESSION['ej'] = $var;
  5. if(!empty($_SESSION['ej'])){
  6. echo "La sesión es: ".$_SESSION['ej'];
  7. exit;
  8. }else{
  9. echo "No existe la sesión";
  10. exit;
  11. }
  12. ?>

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Hacemos una petición POST
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.2pre) Gecko/20100308 Ubuntu/9.10 (karmic) Namoroka/3.6.2pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: PHPSESSID=e85d1da778b6c8fc4db1a83e2bb55385

El script responde:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
La sesión es: Ejemplo

Y miramos si existe el nombre de la sesión en el servidor.
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
# ls |grep e85d1da778b6c8fc4db1a83e2bb55385
sess_e85d1da778b6c8fc4db1a83e2bb55385
 

Y vemos que sí existe.
También si hacemos una petición GET.
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
http://127.0.0.1/a.php?PHPSESSID=0e30e0dcd16d068ed80f95767e56cef8
 

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
La sesión es: Ejemplo

Citar:
Sí que puedes usar galletas para controlar las sesiones, pero no puedes relacionar galletas y sesiones de esa forma.

Las cookies no controlan nada, solo se usa para llamar la sesiones, también se puede llamar vía GET como lo hice anteriormente, el nombre de la sesión por defecto es PHPSESSID y se puede cambiar desde el php.ini
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
$ cat /etc/php5/apache2/php.ini |grep session.name
session.name = PHPSESSID
 


En fin, las sesiones se guardan en el servidor y no la puede controlar el cliente, lo que hace el cliente es llamarla sea vía GET o POST, y si existe el servidor le manda la información que contiene dicha sesión.

Saludos.

sesiones php


Nota 2010-03-27 19:35 @858
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Crear un cookie al verificar un usuario correcto (PHP)
No nos hemos entendido :)

kidd y yo hablamos de sesiones como un proceso, no de Sessions, una librería de PHP.

Y sí que se puede llevar el control de sesión (en minúscula) en el lado del cliente. No es normal hacerlo hoy en día, por el tema de la seguridad, pero es perfectamente válido.

En el mismo enlace a Session (computer science) que te he puesto antes, hay un apartado que habla de esa técnica, en la sección Client side web sessions. Básicamente, consiste en que en el cliente, normalmente a través de una galleta u oculto en la propia página HTML, se guarda todo el estado de la sesión de ese usuario. Cuando el usuario activa la acción de un formulario, la galleta o el contenido oculto del formulario viajan con la petición POST. El servidor obtiene todos los datos referentes a quién y qué estaba haciendo. Por ello no le es necesario almacenar nada en el lado del servidor.

En el caso que nos ocupa, este hilo, debe quedar claro que cuando estáis hablando de sesiones, en realidad estáis hablando de sesiones gestionadas por la librería Sessions de PHP.

Perdón por la confusión.

_________________
JF^D Perl programming


Responder al tema  [ 9 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO