Foros del Web » Programando para Internet » PHP »

PHP Sessions o Cookies propias

Estas en el tema de PHP Sessions o Cookies propias en el foro de PHP en Foros del Web. En un proyecto que estoy haciendo, utilizaba las sesiones php propagadas por cookies, son muy sencillas de usar y van bien. Pero en mi aplicación ...
  #1 (permalink)  
Antiguo 01/03/2012, 22:58
 
Fecha de Ingreso: enero-2004
Mensajes: 236
Antigüedad: 15 años, 10 meses
Puntos: 4
PHP Sessions o Cookies propias

En un proyecto que estoy haciendo, utilizaba las sesiones php propagadas por cookies, son muy sencillas de usar y van bien.
Pero en mi aplicación los usuarios pueden elegir recordar la sesión, por lo tanto aunque cierren el navegador, al entrar en la web estarán logeados.

Aquí viene el problema, las cookies que utiliza php son de sesión, y se borran al cerrar el navegador, puedo modificar el php.ini para darles una duración, pero no puedo utilizar ambas opciones, para aquellos que no quieran recordar la sesión, y no podre modificar eso en todos los servidores que pueda estar mi aplicación.

Por lo que yo utilizo una segunda cookie solo para logearse, aquellos que han cerrado el navegador y quieren que se recuerde su sesión; pero deberia poder hacerlo con una sola cookie.

Entonces me olvido de las sesiones php, y utilizo solo mi cookie guardada en la MySQL haciendo consultas a cada acción? Me parece que es lo que debo hacer, pero no acabo de estar seguro.
  #2 (permalink)  
Antiguo 01/03/2012, 23:10
Avatar de rigobcastro  
Fecha de Ingreso: febrero-2012
Ubicación: Lejanías
Mensajes: 69
Antigüedad: 7 años, 8 meses
Puntos: 21
Respuesta: PHP Sessions o Cookies propias

Si quieres guardar los datos de la sesión y usarlas constantemente asi se cierre el navegador. Guardalas en una BD, en tu caso Mysql y haces una función que compare estos datos a todo momento.

Guarda en la tabla de mysql el ID de la sesión con sus datos, obviamente lo mas importante es la IP y la info del navegador en el caso para que luego puedan ser comparados. Esta tabla será inmensa si tienes un trafico movido asi que tendrás que crear funciones para eliminar datos que ya no están vigentes.

En el framework Codeigniter, existe una librería Session que te ahorra todo esto con su configuración para alojarse en la BD y eliminar/guardar la sesión si se cierra el navegador.

Saludos!
  #3 (permalink)  
Antiguo 01/03/2012, 23:58
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 4 meses
Puntos: 793
Respuesta: PHP Sessions o Cookies propias

Te dejo unos enlaces interesantes:

http://phpsecurity.org/code/ch07-3
http://phpsecurity.org/code/ch07-4

y la explicación por Triby

http://www.forosdelweb.com/f18/hacer...6/#post3979218

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 02/03/2012, 00:02
 
Fecha de Ingreso: enero-2004
Mensajes: 236
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: PHP Sessions o Cookies propias

Cita:
Iniciado por rigobcastro Ver Mensaje
Si quieres guardar los datos de la sesión y usarlas constantemente asi se cierre el navegador. Guardalas en una BD, en tu caso Mysql y haces una función que compare estos datos a todo momento.

Guarda en la tabla de mysql el ID de la sesión con sus datos, obviamente lo mas importante es la IP y la info del navegador en el caso para que luego puedan ser comparados. Esta tabla será inmensa si tienes un trafico movido asi que tendrás que crear funciones para eliminar datos que ya no están vigentes.

En el framework Codeigniter, existe una librería Session que te ahorra todo esto con su configuración para alojarse en la BD y eliminar/guardar la sesión si se cierra el navegador.

Saludos!
Estaba respondiendo, y expiro la sesión... ves mal para el foro, dura muy poco, ya ni me acuerdo de que decía que rabia da, y ni se guardo el texto al retroceder como en otros foros.

Resumiendo, si eso es lo que hacia con la cookie que comentaba. Solo he de utilizar la cookie propia para todo.

La ip, he comprobado como ni twitter ni facebook la tienen en cuenta, he pensado restringirlo a los dos primeros números de la ip, así cuando se cambie la ip dinámica estará logeado igualmente. (Quizás es lo que hacen las webs que comentaba, no lo he comprobado.)

El tema del navegador, y también resolución, sistema operativo que ya valore en su día, concluí que para mi aplicación (no contiene información personal ni datos de pagos) no es necesario y seria un lastre comprobarlo cada vez.

Tema borrar cookies caducadas, he pensado que de forma indirecta seria mejor, para ahorra tamaño a la tabla cookies, y haría un repaso a partir de un timestamp de ultima actividad en la tabla usuarios.

No utilizo frameworks. Gracias por tus respuestas.

Última edición por llnitoll; 02/03/2012 a las 00:12
  #5 (permalink)  
Antiguo 02/03/2012, 00:35
 
Fecha de Ingreso: enero-2004
Mensajes: 236
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: PHP Sessions o Cookies propias

Cita:
Iniciado por andresdzphp Ver Mensaje
En el ejemplo de phpsecurity, no es tonteria la separación del identifier y el token? O es por almacenarlo en los 32 caracteres varchar, y hacer una búsqueda mas rápida.

Y lo que voy a comentar ahora mismo no se si es que me he vuelto loco, porque en mi aplicación también lo hago, al igual que el ejemplo de phpsecurity, compruebo a la inversa el hash con las cookies; pero es que si alguien a robado las cookies, esa comprobación va a dar correcta de todas formas, ahora no le veo el sentido

Última edición por llnitoll; 02/03/2012 a las 12:13
  #6 (permalink)  
Antiguo 04/06/2012, 18:04
Avatar de incaib  
Fecha de Ingreso: junio-2012
Ubicación: Inca
Mensajes: 7
Antigüedad: 7 años, 5 meses
Puntos: 0
Busqueda Respuesta: PHP Sessions o Cookies propias

Buenas noches ahora ando con #CodeIgniter y con el problema de que con el php sdk 3.0 de facebook no consigo hacer logout. Si lo consigo eliminando el cookie a mano por ejemplo en el mozilla en ver cookies ...

Pero me interesa conseguirlo con el botón logout. Aprendí el helper de session de CodeIgniter. Me he dado cuenta que la variable de session que me guarda la cookie que hace que no se haga el logout hasta pasado 30mínutos es [PHPSESSID] la que averigué haciendo un print_r($_COOKIES); y así la encontré.

Resulta que prueba a grabarla como NULL, ponerla con fecha negativa para que la detecte caducada, cual es mi sorpresa que no lo consigo. Probaré a hacer la verificación con Mysql que ustedes muestran. Gracias por su ayuda. Saludos.

Para probar lo que digo si se puede poner un url si no quitenla o avisenme.

[URL]http://www.ibsegundamano.es/club/iniciofb/[/URL]

Un poco del Code del Controlador iniciofb.


Código PHP:
Ver original
  1. //Preparo el array con los datos para enviar a la librería facebook al iniciarla con CodeIgniter
  2.             $facebook = array(
  3.                   'appId'  => $fbconfig['appid'],
  4.                   'secret' => $fbconfig['secret'],
  5.                   'cookie' => true,
  6.                 );
  7.             //Cargo la librería de facebook asignandole el array facebook con los datos de mi aplicacion
  8.             $this->load->library('facebook',$facebook);
  9.             //Inicio usuario y preparo loginUrl y logoutUrl
  10.             $data['user'] = $this->facebook->getUser();
  11.  
  12.             if ($data['user'])
  13.             {
  14.                 try                
  15.                 {
  16.                     // Proceed knowing you have a logged in user who's authenticated.
  17.                     $data['user_profile'] = $this->facebook->api('/me');
  18.                 }
  19.                 catch (FacebookApiException $e)
  20.                 {
  21.                     echo "</br>Dentro de un user null</br>";
  22.                     $user = null;
  23.                 }
  24.             }
  25.             $data['loginUrl']   = $this->facebook->getLoginUrl(
  26.                     array(
  27.                         'scope'         => 'email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown',
  28.                         'redirect_uri'  => 'http://www.ibsegundamano.es/club/iniciofb/'
  29.                     )
  30.                    );
  31.                $data['logoutUrl']  = $this->facebook->getLogoutUrl();
  32.                $data['accesstoken'] = $this->facebook->getAccessToken();
  33.                // Cargo modelo noticias y luego crear el de facebook ademas leo las noticias
  34.                //Cargamos las vistas y a contenido le pasamos data para trabajar con los datos anteriormente dados de alta.
  35.             $this->load->view('templatefb/header');
  36.             $this->load->view('templatefb/menu');
  37.             $this->load->view('templatefb/contenido',$data);    
  38.             $this->load->view('templatefb/end');

Última edición por incaib; 04/06/2012 a las 18:05 Razón: Cambios para que se vea mejor el mensaje. Principiante en un foro errores a montones. Gracias¡¡

Etiquetas: cookies, mysql, sessions, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:30.