Foros del Web » Programando para Internet » PHP »

utilizar sesion

Estas en el tema de utilizar sesion en el foro de PHP en Foros del Web. Hola, estoy aplicando un metodo de autenticacion de usuarios para el proyecto que estoy desarrollando, pero me surge una duda ¿como hago para utilizar las ...
  #1 (permalink)  
Antiguo 16/12/2004, 13:11
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
utilizar sesion

Hola, estoy aplicando un metodo de autenticacion de usuarios para el proyecto que estoy desarrollando, pero me surge una duda

¿como hago para utilizar las sesiones de tal manera que el usuario tenga acceso a ciertas paginas solo cuando se haya registrado? es decir que no pueda acceder digitando la URL?

yo estoy utilizando lo siguiente:

Código PHP:

<? 
// Incio de uso de sesiones .. 
session_start(); 
// validación de la existencia de la sesión 
if (empty($_SESSION['user'])){ 
   echo 
"Acceso Incorrecto"
   
// y terminamos la ejecución del script ... 
   
exit; 

?>
pero obviamente no funciona por que le falta algo pero no se que es
__________________
Say no more.......
  #2 (permalink)  
Antiguo 16/12/2004, 14:12
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
Hola.. ;)

mm pues a ver.. podrias por ejemplo en la tabla donde tenes almacenados los datos de usuario.. o el archivo... poner un nivel de acceso.. y asi sabes donde restringir...

es decir.. si el nivel de acceso es '0' o administrador.. o algo asi.. podrias validar si puede o no tener acceso a determinada información.

Ahora... otra cosa seria saber si existe.... como vos decis...

cuando el se registra sus datos deben quedar en algun lugar.. entonces harias tu conexión si es a una base de datos... llevarias el valor de si existe o no a una variable de sessión y es por ella por quien preguntas...

$_SESSION[user]=$row["usuario"];

pues ahi hago un supuesto de variable.. que tiene cierto campo de la base de datos...

y luego ahi si preguntaria por esa variable de session.. mmm espero que me entendas.. jiji

if (empty($_SESSION['user']))
  #3 (permalink)  
Antiguo 16/12/2004, 15:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa mi script Autentificator .. ahí veras como autentificar/validar a tu usuario bajo la existencia de las variables de sesión que creas cuando autentificas a tu usuario.

http://php.cluster-web.com/autentificator/

De todas formas .. tu "validación" de tu "usuario" en función de la existencia de tu variable de sesión es correcta, pero habría que ver donde creas tu variable de sesión y de como propagas el SID de la sesión .. Según lo que (no se ve) .. estás asumiendo que lo haces por "cookies" .. así que requeriras de un navegador que acepte cookies y una configuración de PHP tipo:

session.use_cookies = ON

Un saludo,
  #4 (permalink)  
Antiguo 17/12/2004, 07:54
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Cluster gracias por darme el dato de tu autenticador, pero ahora cuando lo intento instalar me dice:

Cita:
Instalación de Autentificator - Gestor de Usuarios by Cluster.

ERROR!!: Ha ocurrido un error en la instalación:
Mysql dice: La tabla 'usuario' ya existe

nota: este script no instala la Base de datos, solo la tabla necesaria.
lo qeu hice fue lo siguiente:

instale la tabla del autenticador en mi BD que es donde ya tengo todos los datos que voy a usar y alli tengo ya creada una tabla con el nombre usuario, afecta esto en algo?

por favor explicame como adapto este autenticador para usar los datos que ya tengo en mi tabla usuario

gracias
__________________
Say no more.......
  #5 (permalink)  
Antiguo 17/12/2004, 08:13
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
bien, ya le encontre el chiste, pero ahora le asigne el nombre de mi tabla "usuario" y me dice que error al consultar en "usuarios", que es la tuya, por que pasa esto si en el archivo de configuracion yo le puse que utilizara mi tabla?
__________________
Say no more.......
  #6 (permalink)  
Antiguo 17/12/2004, 08:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. estás usando el "instalador" .. El instalador (como dice la documentación) crea la tabla de nombre que indiques ..

Si tu ya tienes creada esa tabla .. OK, pero tendrás que respetar la estructura que usa Autentificator y que puedes ver en el .sql que se adjunta. Al igual de la forma de crear usuarios con contraseñas encriptadas en MD5.

Lo que deberías hacer para probar "Autentificator" es dar otro nombre a tu tabla de usuarios para que puedas usar el Instalador del mismo y este cree la tabla con el usuario "demo" que ahí se menciona .. lo pruebas y en base a eso adaptas tu BD o modificas Autentificator para que use los nombres de tus campos de tus tablas y demás ..

Un saludo,
  #7 (permalink)  
Antiguo 17/12/2004, 08:57
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
bueno, pues resulta que revise el .sql y estoy conservando la misma setructura, es mas en mi tabla le cambie los nombres y estructura a los campos que almacenan el usuario y pss de acuerdo a los que estan en el .sql, ya reinicie mi servidor y nada, me sigue sacando el mismo error
__________________
Say no more.......
  #8 (permalink)  
Antiguo 17/12/2004, 08:58
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
Que error te saca.. el de la tabla?.. que ya existe? o tenés otro nuevo?
  #9 (permalink)  
Antiguo 17/12/2004, 09:01
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Error: No se pudo realizar consulta a la Base de datos Usuarios

es el mismo, cuando en el aut_config.inc.php le especifique que utiklizara "usuario"
__________________
Say no more.......
  #10 (permalink)  
Antiguo 17/12/2004, 09:11
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
mmm bueno ese error en el autentificador de cluster si no estoy mal... es el error 1, debes estar haciendo algo mal, o llamando a la tabla o a la base de datos y no tienen el mismo nombre, verifica los datos de la tabla.

mira el script aut_verifica.inc.php

y busca esta línea

$usuario_consulta = mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location: $redir?error_login=1"));

compara los nombres de los campos con los que tenes a ver que esta pasando.
  #11 (permalink)  
Antiguo 17/12/2004, 09:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
el_cesar .. por favor lee bien mi mensaje .. ya te he dado la solución ahí.

No puedes cambiar de "tabla" a la que tu usas así como así .. ¿acaso coincide la estructura de ambas tablas .. por lo menos en esos nombres de campos que Autentificator usa: ID,usuario,pass,nivel_acceso .. ? ..

Un saludo,
  #12 (permalink)  
Antiguo 17/12/2004, 09:44
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
bien, ya solucione el problema, pero ahora inserte un usuario nuevo, pero me dice que no existe
__________________
Say no more.......
  #13 (permalink)  
Antiguo 17/12/2004, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Volvemos a lo mismo ...

Y como ingresas tu usuario? .. lo haces por el administrador que Autentificator tiene .. o bien lo haces tu a mano? .. y si es así .. como lo haces .. ¿leistes que las contraseñas Autentificator las gestiona de forma encriptada en MD5?.

Te funciona el usuario "demo" que Autentificator crea si usastes el instalado (o cambiastes los nombres de tus campos de tu própia tabla o el código de Autentificator? ..)

Un saludo,
  #14 (permalink)  
Antiguo 17/12/2004, 12:18
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
no veo ningun administrador de usuarios
__________________
Say no more.......
  #15 (permalink)  
Antiguo 17/12/2004, 12:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126


el_cesar .. por favor .. LEEE la documentación de Autentificator .. !!!!

Un saludo,
  #16 (permalink)  
Antiguo 17/12/2004, 13:17
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
si si... vamos cesár lee!... yo he usado el autentificador de Cluster... incluso he realizado modificaciones hasta en diseño y me ha funcionado super bien... eso si, lo primero que hice fué leer la documentación...

aunque si seguis con lios cuentas..
  #17 (permalink)  
Antiguo 17/12/2004, 16:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Cluster.

según tu respuesta:

...pero habría que ver donde creas tu variable de sesión y de como propagas el SID de la sesión .

¿de que que formas se puede propagar el SID de una sesión?

Yo lo poco que he usado sesiones lo "unico que hago" que poner session_start(); y ya tengo las variable disponibles en ese script.

¿Cuantas formas hay de propagar el SID y como se hace la propagación?
  #18 (permalink)  
Antiguo 18/12/2004, 10:59
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Bueno, luego de aprender la leccion que hay que leer bien antes de probar las cosas, logre instalar bien el script de cluster, pero ahora tengo un problemilla cuando accedo con admin admin, en el panel de control me saca estas notificaciones:

Cita:
Notice: Undefined index: accion in c:\archivos de programa\easyphp1-7\www\portal\autenticacion\aut_gestion_usuarios.ph p on line 192

Notice: Undefined index: accion in c:\archivos de programa\easyphp1-7\www\portal\autenticacion\aut_gestion_usuarios.ph p on line 210

Notice: Undefined index: accion in c:\archivos de programa\easyphp1-7\www\portal\autenticacion\aut_gestion_usuarios.ph p on line 272
Cluster, a que se debe esto?

las lineas que menciona son las siguientes:

[QUOTE]
192 if ($_GET['accion']=="editarnivel"){
210 if ($_GET['accion']=="nuevo"){
272 if ($_GET['accion']=="hacernuevo"){

a que se debe esto, la verdad es que no me atrevo a moverle nada por temor a dañar algo.

gracias
__________________
Say no more.......
  #19 (permalink)  
Antiguo 18/12/2004, 20:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por pellagofio
Cluster.

según tu respuesta:

...pero habría que ver donde creas tu variable de sesión y de como propagas el SID de la sesión .

¿de que que formas se puede propagar el SID de una sesión?

Yo lo poco que he usado sesiones lo "unico que hago" que poner session_start(); y ya tengo las variable disponibles en ese script.

¿Cuantas formas hay de propagar el SID y como se hace la propagación?
El SID de una sesiòn (Identificador Único de sesión) se ha de propagar siempre para que te funcionen las sesiones.

De hecho es ese "SID" el que relaciona y "ata" al cliente (que iniciò la sesión) con el servidor (el archivo que se crea en el servidor y que contiene tus variables de sesiòn). Por eso .. si se pierde ese "SID" o no es propagado .. no puedes acceder a tus variables de sesiòn.

El SID lo puedes propagar de 2 formas principalmente ..
* Por el URL
* Por cookies

Por el URL a su vez tiene dos mètodos .. uno "automático" donde PHP bajo la directiva: session.use_trans_sid =ON (y en conjunto con url_rewrite_tags) de tu php.ini .. define que PHP sobre-escribirà ciertos tags HTML para "incrustrar el SID" en ellos. .. Eso lo veras en sitios como este foro donde ves que hay una variable siempre en el URL tipo: nombre=978as8df7879asdf987as .. todo eso es el "SID".

Si no lo hace PHP automàticamente .. lo tendràs que hacer tu a mano. Tendràs que incrustar el SID en tus links, formularios (campos hidden o en el acction ..) y otro tipo de redireccionamientos que hagas.

De hecho .. PHP en "modo automàtico de progaciòn del SID en el url" NO sobre-escribe para incrustrar el SID en ellos en redireccionamientos javascript, ni en header("Location: ....") de PHP .. ni en etiquetas "META" de HTML tipo "refresh".

La otra opciòn de propagar el SID es en Cookies, lo define PHP en su directiva (php.ini): session.use_cookies (y opcionalmente session.use_only_cookies = ON). Esta es la opciòn màs segura para propagar el SID .. pero requiere que tu cliente (navegador) acepte cookies. No require nada màs extra en tu programaciòn habitual .. sòlo como siempre iniciar el uso de sesiones con session_Start() y listo .. cualquier tipo de redireccionamiento que se haga no hay que hacer nada màs. El SID viaja en tu cookie y es leido de esa cookie de ese cliente que la iniciò.

Si en tu caso ni conoces que es el SID .. es por què lo propagas en cookies y por suerte dispones de un navegador que las acepta (las cookies) .. asì que nunca veras el SID en el URL (pues "viaja" en tu cookie) y siempre te funciona la propagaciòn del SID .. pues es tomada de la cookie.

En las FAQ's de este foro hay unas cuantas de ellas que tratan el tema de sesiones, una de ellas explica bastante bien casi todo esto que te he expuesto aquì. Es necesario conocer "como funciona" no sòlo con "còdigo" sino con "teorìa" y sobre todo con que configuraciòn de PHP puede afectar al comportamiento de estas para saber como solventar un problema o por donde mirar. (principalmente va esto dirigido a el_cesar) ...

Un saludo,
  #20 (permalink)  
Antiguo 18/12/2004, 20:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
el_cesar ...

El problema que describes lo puedes solventar por el momento con:

Código PHP:
error_reporting(E_ALL E_NOTICE); 
(usalo al principio del script que ocasiona el problema)

En realidad eso es un "fallo" mio de programaciòn .. Realmente se deberìan construir esas sentencias tipo:

Código PHP:
// preguntar si està definida la variable en cuestiòn "externa" al script.
if (isset($_GET['alguna_variable_externa'])){
   
// entonces .. si està definida la variable .. se usa 
   
if ($_GET['accion']=="editarnivel"){
   }

pero .. hasta la fecha la "flojera" (gandulitis aguda) no me ha dado por adaptar dicha parte del còdigo .. Realmente ese "Administrador" para mi no es màs que un ejemplo de uso del sistema de autentificaciòn .. lo que yo "vendo" es el motor principal de autentificaciòn "aut_verifica.inc.php"

Un saludo,
  #21 (permalink)  
Antiguo 24/12/2004, 09:46
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Cluster, quisiera que me explicaras como puedo manejar esto que quiero, por que segun veo solo puedo trabajar con las variables, sin asignarle a mi condicional un valor constante como lo estoy haciendo

Código PHP:
if ($_SESSION['usuario_login'] == "1") { 
header ("Location: portal/index_admon.php"); 
exit; 

a ver, intentando ser un poo mas claro, lo que pretendo es: que si se loguea webmaster, entonces vaya a una pagina, si se loguea Admin, vaya al control total del sitio, o si se loguea un usuario, vaya solo a la parte privada (solo contenido), tal vez no tengo muy claro lo de los niveles de acceso por eso agradeceria me los explicaras un poco mas.
__________________
Say no more.......
  #22 (permalink)  
Antiguo 24/12/2004, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
el_cesar ..

La gerarquía de que signifiquen los "niveles" de acceso para tu aplicación los defines tu mismo ...

Por defecto Autentificator asume que el nivel "0" vendría a ser el "Administrador" ... y de ahí hacia arriba niveles con permisos inferiores.

Puedes hacer una analogía tipo:

0 -> webmaster
1 -> administrador
2 -> usuario tipo1
3 -> usuario tipo2

y cosas similares ..

Luego en base a esa variable de sesión que guarda el dato del nivel del usuario activo .. te compones tus "if" con los operadores lógicos que necesites = ... < ..> .. etc.

Un saludo,
  #23 (permalink)  
Antiguo 24/12/2004, 10:45
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Ok, pero es que entonces no se cual es el problema que tengo en este if que construi:

Código PHP:
if ($_SESSION['usuario_login'] == "1") { 
header ("Location: portal/index_admon.php"); 
exit; 

el problema es que no me acepta la validacion, es decir, logueo un usuario con nivel 1, y en lugar de redireccionarlo como es de esperarse, lo deja en la pagina que esta ejecutando el condicional
__________________
Say no more.......
  #24 (permalink)  
Antiguo 24/12/2004, 11:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. cual es el código completo que usas? para ese script.

Además . .ahí no redireccionas por "nivel" de acceso sino por el ID de tu usuario en tu BD ..

Un saludo,
  #25 (permalink)  
Antiguo 24/12/2004, 11:05
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Ok, mi codigo es:

Código PHP:
<?
require("portal/aut_verifica.inc.php");
include(
'portal/lebasi444.php');
$nivel_acceso=0;
if (
$nivel_acceso $_SESSION['usuario_nivel']){
header ("Location: portal/index_privado.php");
exit;
}
if (
$_SESSION['usuario_login'] == 2) {
header ("Location: portal/index_privado.php");
exit;
}
?>
<p><a href="portal/links/introducir.php">Agregar Link a la Base de Datos</a></p>
<p><a href="portal/eventos/introducir_evento.php">Agregar Evento Nuevo</a></p>
<p><a href="base/actual.php">Actualizacion de Base de Datos</a></p>
<p><a href="portal/proyectos/registrar_proyecto.php">Agregar Proyectos</a></p>
<p><a href="portal/noticias/formulario.htm">Actualizar Noticias</a></p>
<p><a href="portal/aut_gestion_usuarios.php" class="unnamed1">Administar Usuarios</a></p>
ese script recibe los datos del autenticador
__________________
Say no more.......
  #26 (permalink)  
Antiguo 10/01/2005, 03:32
 
Fecha de Ingreso: noviembre-2003
Mensajes: 25
Antigüedad: 14 años
Puntos: 0
Cluster, un código muy muy bueno y util, lanzo una pregunta que estoy bastante verde en php.

El autentificator me funciona perfecto.
Lo que yo busco es hacer que los usuarios "asociados" se logen una vez, y tengan acceso a distintas paginas "restringidas" si que tengan que poner otra vez el usuario y pass.

Con tu código, ¿es posible hacer ésto?
  #27 (permalink)  
Antiguo 10/01/2005, 10:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por jmtnez
Cluster, un código muy muy bueno y util, lanzo una pregunta que estoy bastante verde en php.

El autentificator me funciona perfecto.
Lo que yo busco es hacer que los usuarios "asociados" se logen una vez, y tengan acceso a distintas paginas "restringidas" si que tengan que poner otra vez el usuario y pass.

Con tu código, ¿es posible hacer ésto?
Pues si, .. eso hace y controla Autentificator y de hecho lo hace por el uso de sesiones que hace .. lee la documentación y prueba los ejemplos ..

Un saludo,
  #28 (permalink)  
Antiguo 10/01/2005, 10:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
el_cesar .. realmente no entiedo tu "lógica" o mejor dicho tu "gerarquía" de niveles de usuario que has definido ..pues eso no lo controla directamente "autentificator" ni lo define de forma "fija" el mismo .. eso depede de cada uno y de su aplicación.

Hablando de "lógica" .. si tu dices

0 < X .. suponiendo que defines usuarios de 0 a N .. no tiene sentido ese código y de hecho NUNCA pasarás a tu siguiente if() donde haces $_SESSION['usuario_login'] == 2 que por cierto .. no sé que sentido le das a eso . .ahí estás fijando a cierto usuario de nombre "2" ? .. si hablamos de niveles .. la variable que lo controla es $_SESSION['usuario_nivel'] no la otra ..

Medita todo eso .. (tienes un tremendo liooooo!)

Un saludo,
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 15:18.