Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] [Aporte] No permitir acceso a contenido usuarios.

Estas en el tema de [Aporte] No permitir acceso a contenido usuarios. en el foro de PHP en Foros del Web. Hola personas Ayer estuve nadando en el Foro y encontré algunos problemas que se nos da a muchos cuando queremos restringir el acceso a determinado ...
  #1 (permalink)  
Antiguo 22/02/2012, 09:18
 
Fecha de Ingreso: enero-2012
Ubicación: En una casa
Mensajes: 72
Antigüedad: 12 años, 3 meses
Puntos: 2
Información [Aporte] No permitir acceso a contenido usuarios.


Hola personas

Ayer estuve nadando en el Foro y encontré algunos problemas que se nos da a muchos cuando queremos restringir el acceso a determinado contenido de nuestra WEB.

Para empezar, este aporte lo hago con base a mis conocimientos que son poquitos pero con creatividad todo se puede, hay que recordar que la vida del programador está enfocada al método prueba y error, prueba y error...

Basándome en una experiencia recientemente vivida que es: Tengo una página inicial dónde los usuarios se registran o ingresan al contenido para usuarios, inicio mi sesión de usuario y me redirijo al contenido para usuarios.

Hasta ahí creo que todos entendemos. Llega un punto dónde quiero cerrar la sesión ya iniciada... ya sabemos que con: Pero en muchas ocasiones algo nos falla y es que al presionar la tecla back o la tecla de borrar, incluso ingresando la url de nuestra página "premium" o privada, nos redirige y nos muestra nuestra sesión aún activa y todo su contenido; esto resulta incomodo ya que claro, quieres que si se cierra la sesión ps se termine todo y chaito.

Para algunos que no somos monsters programando ya sea porque aún estamos aprendiendo o determinada situación... no tenemos ni idea de cómo solucionar esto, pues acá les entrego una practica y sencilla solución desde nuestro adorado php:

Código PHP:
Ver original
  1. <?
  2. $ese = session_start();
  3. include('conexion.php');
  4. if ($_SESSION != $ese){
  5. echo "<script>
  6. alert('Por favor ingrese nuevamente');
  7. parent.location.href='Nuestra página principal ó página de visita';
  8. </script>
  9. ";
  10. }else{
  11. $ese == $_SESSION;
  12. }
  13. ?>

Explicaré un poquito cómo sirve este script, ya vemos que siempre tenemos que mantener la sesión en todas la páginas que visiten nuestros usuarios, por esto al hacer back o ingresar la url nos va a mostrar nuestra sesión activa.

Qué hacemos acá, pues fácil, en una variable almacenamos nuestra session_start();, después declaramos el if que revisará que haya una sesión activa, de esta manera si la encuentra, nos dejará acceder si no la encuentra pues nos mostrará un mensaje mediante javascript, que pide al usuario que por favor ingrese nuevamente y lo redirige a traves del parent.location a la página de acceso y ya, eso es todo.

Claro... Este script debe declararse antes de cualquier cosa en la página privada o de contenido único para usuarios, ya que si se declara en otro lado, pues bloqueará esa página, y obvio siempre de primeras ya que el código es interpretado de arriba para abajo.
---->
---->


Bueno espero que esto le sirva a alguien en especial a los novel como yo, que han tenido problemas con esto alguna vez.

Cualquier corrección, modificación o aporte es bienvenid@.

__________________
Aprendo, Aprendo Aprendo :D A la filosofía de Golden Boy ^^,
Desarrollo Web en Colombia

Última edición por pato_cuack; 22/02/2012 a las 09:27
  #2 (permalink)  
Antiguo 22/02/2012, 09:56
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: [Aporte] No permitir acceso a contenido usuarios.

de hecho al tener desactivado el inicio de sesión automático en PHP (opción recomendada) se debe llamar siempre a session_start(), cosa que aparece en el manual oficial de PHP.

la solución es simple, se debe difinir como variable de sesión el usuario logueado (o su id en Base de datos, depende del caso), y con:

session_start();
if (isset( $_SESSION['user_name']) ) {...}

verificas si está logueado, algo mucho más simple.

session_start() automáticamente establece la super global $_SESSION, por el cual es innecesario declarar otra variable
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 22/02/2012 a las 10:02
  #3 (permalink)  
Antiguo 22/02/2012, 10:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: [Aporte] No permitir acceso a contenido usuarios.

Perdon pato_cuack, pero estas muy, muy equivocado, revisa que hace session_start(), este te devuelve true o false, dependiendo si pudo o no iniciar la sesión.

Luego $_SESSION es un array súper global, no lo puedes comparar con un booleano, y al final dejar $ese == $_SESSION estas asignando una comparación (que te va a dar false).

Para lo que quieres hacer, tienes que controlar las cabeceras, para que cuando hagan "back" ya la pagina haya expirado, esto lo haces con el cache, y para proteger tus paginas tienes que establecer una variable de sesión para ello.

Ejemplo:

Al iniciar sesión:
Código PHP:
Ver original
  1. $_SESSION['loggedIn'] = true;

Para verificar:
Código PHP:
Ver original
  1. if ($_SESSION['loggedIn'] != true) {
  2.        // muestras mensaje al usuario que no esta autentificado
  3. }

Logout:
Código PHP:
Ver original
  1. $_SESSION['loggedIn'] = false;

No tienes por que hacer lo que haces ya que es enteramente incorrecto.

Saludos.
  #4 (permalink)  
Antiguo 22/02/2012, 10:44
 
Fecha de Ingreso: enero-2012
Ubicación: En una casa
Mensajes: 72
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: [Aporte] No permitir acceso a contenido usuarios.

Comprendo :) como comenté soy novel en programación web además empírico y esta fue la única opción que se me ocurrió cuando tuve ese problema.

De todas maneras gracias por las correcciones y siempre es bueno que las personas que saben te expliquen y te instruyan, así como ustedes 2 lo han hecho :)
__________________
Aprendo, Aprendo Aprendo :D A la filosofía de Golden Boy ^^,
Desarrollo Web en Colombia

Etiquetas: contenido, permitir, variables, 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




La zona horaria es GMT -6. Ahora son las 19:43.