Clase y variables disponibles en TODO el sitio.

Iniciado por l337*, 6 Junio 2012, 22:16 PM

0 Miembros y 2 Visitantes están viendo este tema.

l337*

Buen dia,

Tengo una duda que me ha confundido mucho.

Quiero crear una clase, Autenticador, que sea utilizable en todo el sitio y se encargue de determinar si un usuario esta loggeado o tiene permisos para ver/modificar contenido.

Necesito que esta clase se cree al cargar misitio.com (todas las paginas) y NO se destruya al terminar de cargar el script/pagina.

Por ejemplo, alguien va a misitio.com/contenido , contenido carga su header que incluye esta clase Autenticador, la cual determina que no esta loggeado y lo redirecciona a misitio.com/login  . Cuando el usuario verifica su identidad, la misma instancia de la clase que lo mando a login, debe de guardar el valor de loggeado y mantenerlo así hasta que el usuario termine sesión o cierre el navegador.

Actualmente estoy usando el metodo singleton, pero la vida del objeto solo dura hasta que se termina de cargar la pagina. Como puedo hacer para que una instancia de objeto se mantenga viva como lo hacen las sesiones de usuario ? es decir, que el objeto y los valores de sus variables privadas permanezcan igual hasta que se destruya el objeto por "accion" del usuario?

He leído 50/50 que ES y NO ES posible hacer esto.... ????

Gracias.... espero q se me entienda :huh:

Que dicen?


WarGhost

Lo que puedes hacer es serializar tu objeto y encapsularlo en una variable de session, luego solo es cuestión de que determines el tiempo que quieres que dure esa variable de session ^^.

P.D:La verdad no entiendo muy bien para que quieres hacer eso, realmente debes comprobar la veracidad del "login" cada vez que recarga, sobre todo por seguridad.
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

l337*

Cita de: WarGhost en  6 Junio 2012, 22:19 PM
Lo que puedes hacer es serializar tu objeto y encapsularlo en una variable de session, luego solo es cuestión de que determines el tiempo que quieres que dure esa variable de session ^^.

P.D:La verdad no entiendo muy bien para que quieres hacer eso, realmente debes comprobar la veracidad del "login" cada vez que recarga, sobre todo por seguridad.

cierto, tambien lei eso de meterlo serializado en sesion, pero lo que no quiero es usar sesion, por el hecho de que expira y pierde los datos, aun cuando se le extiende la vida en session.gc_maxlifetime (ya nos ha pasado).

lo quiero hacer por que no quiero depender de variables de sesion, quiero guardar los datos del usuario en el objeto. Si no hay de otra pues ni modo, lo hare con sesion hehe.

gracias

engel lex

no es mas fácil pasarlo como una variable de sesión? :s
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

WarGhost

Métodos hay muchos, pero lo mejor es BD y Sessiones.
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

WHK

La única forma de que php pueda saber un valor independiente del script es guardando el dato en alguna parte, sin guardar el dato es imposible, el tema es donde lo guardas.

Puedes usar una cookie cifrada en rc4 pero recuerda que el valor de las cookies tienen un límite, lo otro es utilizar $_SESSION pero veo que no te resulta, lo otro es utilizar un archivo a modo de base de datos, que dentro de un txt se guarde el id de una cookie con los permisos que necesitas, algo asi como un /etc/passwd, lo otro es utilizar bases de datos (es lo recomendable) donde el usuario cuando se loguea le pones una cookie con el id de usuario y un token unico (no el pass) y verificas que ese token y ese id coincidan en la base de datos y si es asi entonces haces la carga de sus datos.

Para eso te recomiendo hacer una web modular donde haya un unico archivo de configuraciones o archivo de sistema que haga todas estas cargas antes de incluir tus módulos necesarios o simplemente utilizar MVC como codeigniter.

Si no guardas la variable es imposible, solo debes decidir donde guardarla y no te recomiendo utilizar la ip como gancho porque puede que dos o mas personas se conecten desde la misma ip como por ejemplo desde su trabajo u hogar.

l337*

Gracias.

Si, veo que no tendre otra opcion mas que darle por sesion. Lo de la cookie y token me gusta, pero vendria siendo similar, ademas no garantiza que el usuario reciba la cookie... bueno, habria que codear un verificador para eso.

Muchas gracias por su ayuda.

saludz

WarGhost

La verdad, yo re recomiendo que no intentes reinventar la ruda, no busques problemas para los que ya hay solución.
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

WHK

Las bases de datos son mucho mas fiables que las sesiones de php, además las sesiones de php también utilizan una cookie, o si no como sabe php de quien es la sesión?, php deja una cookie llamada PHPSESSID y con ese valor php carga los datos de un archivo en el directorio temporal con el mismo nombre del valor de la cookie. Siempre cabe la posibilidad de que la sesión falle o tenga problemas con la expiración o que se borre cuando se le haga mantención al servidor y se limpie el directorio temporal, por eso para además de llevar estadisticas se utiliza una base de datos donde sea, en un txt, en mysql, en sqlite, en access, en un excel, en palitos de fosforos, donde sea pero debe guardarse aparte.

Graphixx

Cita de: WarGhost en  6 Junio 2012, 22:19 PM
Lo que puedes hacer es serializar tu objeto y encapsularlo en una variable de session, luego solo es cuestión de que determines el tiempo que quieres que dure esa variable de session ^^.

Tal como ya te comentaron los compañeros WarGhost y WHK, lo que mas se usa es tener esas variables en una BD, y cuando el usuario se loguee, serializar el objeto en sesion para cuando se necesite usar.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog