Foros del Web » Programando para Internet » PHP »

Recargar mi página

Estas en el tema de Recargar mi página en el foro de PHP en Foros del Web. Hola: He realizado un sistema de administración que trabaja con sesiones y cookies. Ahora las cookies son dos y las uso para poder guardar el ...
  #1 (permalink)  
Antiguo 15/04/2004, 19:19
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Recargar mi página

Hola:
He realizado un sistema de administración que trabaja con sesiones y cookies. Ahora las cookies son dos y las uso para poder guardar el sesionid asignado a ese usuario (esta contenido en un campo de la Base de Datos) y el tipo de usuario, pues mi sistema de administración cuenta con los siguientes niveles de seguridad:
0. Administrador máximo del sitio
1. Administrador medio
2. Webmaster
3. Profesor
4. Alumno

para luego cuando el usuario acceda al Sistema de Administración (solo los usuarios del 0 al 3) saber que permisos debo dar. Ahora las cookies las creo al chequear los datos del usuario de la siguente forma:
Código PHP:
 require("functions.php");
 
server();
 
nocache();
 
$pass md5($_POST['passwd']);
 
$query mysql_query("SELECT * FROM usuario WHERE login='".$_POST['user']."' AND passwdenc='".$pass."' AND activo=1");
 
$resultado mysql_fetch_array($query);
 if (isset(
$user) && ($user == $resultado['login']) && isset($passwd) && ($pass==$resultado['passwdenc'])){
    
session_start();
    
$_SESSION['adminlogin'] = md5($user);
    
$_SESSION['adminpasswd'] = md5($passwd);
 if(
$resultado['session']==""){
     
$sess session_id();
     
mysql_query("UPDATE usuario SET session='".$sess."' WHERE login='".$_POST['user']."' AND passwdenc='".$pass."' AND activo=1");
 }
  if(
$resultado['tipo']=="0"){
      
redirect("Departamento de Marxismo","1","indexadmin.php?accion=entrar&tipo=0&ses=".$resultado['session']."","Entrando al Sistema de Administración ...<br>Espere unos segundos para ser redireccionado");
  }elseif(
$resultado['tipo']=="1"){
      
redirect("Departamento de Marxismo","1","indexadmin.php?accion=entrar&tipo=1&ses=".$resultado['session']."","Entrando al Sistema de Administración ...<br>Espere unos segundos para ser redireccionado");
  }elseif(
$resultado['tipo']=="2"){
      
redirect("Departamento de Marxismo","1","indexadmin.php?accion=entrar&tipo=2&ses=".$resultado['session']."","Entrando al Sistema de Administración ...<br>Espere unos segundos para ser redireccionado");
  }elseif(
$resultado['tipo']=="3"){
      
redirect("Departamento de Marxismo","1","indexadmin.php?accion=entrar&tipo=3&ses=".$resultado['session']."","Entrando al Sistema de Administración ...<br>Espere unos segundos para ser redireccionado");
  }elseif(
$resultado['tipo']=="4"){
      
redirect("Departamento de Marxismo","1","indexadmin.php?accion=entrar&tipo=4&ses=".$resultado['session']."","Entrando al Sistema de Administración ...<br>Espere unos segundos para ser redireccionado");
  }    
 }else{
     
redirect("Departamento de Marxismo","3","administrador.php?accion=entrar&error=errordatos","No está autorizado a entrar a esta página.<br>Por favor espere unos segundos.");
 } 
y luego en el indexadmin.php
Código PHP:
 require("functions.php");
 
server();
 
session_start();
 
checaadminsess();
 
nocache();
 
$query mysql_query($query);
 
setcookie("sessionid",$_GET['ses']);
 
setcookie("usertype",$_GET['tipo']); 
pero los vinculos que me conducen a las otras páginas de administración son de la siguiente forma:
Código PHP:
 asignaturasadmin.php?action=admin&type=<? echo $HTTP_COOKIE_VARS['usertype']; ?>&ses=<?php echo $HTTP_COOKIE_VARS['sessionid']; ?>
 
 uuariosadmin.php?action=admin&type=<? echo $HTTP_COOKIE_VARS['usertype']; ?>&ses=<?php echo $HTTP_COOKIE_VARS['sessionid']; ?>"
ahora la duda mia es porque cada vez que entro al sistema de administracióm mío, si en mi barra de navegador la dirección es esta: indexadmin.php?accion=entrar&tipo=0&ses=4a1a09a3c6 43e2846ebd8da0b86f7cab

debo dar F5 o recargar mi página para que esas variables que estan en los vínculos que me conducen a otras páginas del sistema de administración tomen valores, es decir, sino le hago nada el vínculo es este: eventosadmin.php?action=admin&type=&ses=, sin embargo si doy F5 se ponen así: eventosadmin.php?action=admin&type=0&ses=4a1a09a3c 643e2846ebd8da0b86f7cab

que hago? me dan alguna solución? porque en verdad ya no se que hacer

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 15/04/2004, 21:33
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 21 años, 11 meses
Puntos: 7
Prueba agregando estas dos lineas en el head:
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

y yo seria de la idea de que uses header(location) mejor que redirect()
__________________
No tengo firma ahora... :(
  #3 (permalink)  
Antiguo 15/04/2004, 21:40
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mex
Mensajes: 140
Antigüedad: 21 años, 4 meses
Puntos: 0
Efectivamente como lo indica Mikel es un problema de Cache.

A veces los Metas No-Cache no funcionan como quiseramos despues de logearnos a un sistema pero podemos dar salidas elegantes.
Por ejemplo:
Despues de ingresar a tu página de lógin "fuerza" a tu browser a que tome nuevos datos haciendo una página de "Bienvenida" diciendo "Gracias por ingresar, lo estamos redireccionando..."
Tal como lo hace este foro cuando te logeas.
Claro, no sobran que en tu página de bienvenida pongas metas No-Cache siempre así como en tus demás páginas.

Saludos.
__________________
escribiendo mi libro de AJAX
  #4 (permalink)  
Antiguo 16/04/2004, 08:31
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
No tan así

Bueno muchachos les digo que redirect es una función que tengo hecha yo mismo en mi sitio que se encarga de redireccionarme pasado un x tiempo. Usa los meta también, pero creo que esa opción que me da no me es factible.

Salu2
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 16/04/2004, 11:35
 
Fecha de Ingreso: diciembre-2003
Ubicación: Bogota
Mensajes: 7
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola Amigo, la verdad no entendí mucho el problema. Sin embargo, creo que el problema está con el caché que queda almacenado en el explorador. Yo tuve inconvenientes en el pasado generando archivos tiff y pdf que quedaban pegados al browser. La forma de solucionarlo fué agregando al final de la url una pequeña particula de php: ."&".rand() . Con lo que siempre tienes un nuevo parámetro en la url. Y esto te garantiza una actualización automática del browser.

Espero que te sea de ayuda
  #6 (permalink)  
Antiguo 16/04/2004, 11:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Las cookies sólo quedan disponibles en la primera iteracción con el servidor . no antes.

No sé por qué propagas el SID en cookies que luego propagas finalmente por el URL? creadas por tí si PHP ya lo hace si configuras:

session.use_trans_sid = 0
session.use_only_cookies = 1
session.use_cookies = 1

Y no veras el SID en el URL nunca más .. (asegurate de usar un navegador que acepte cookies).

Incluso puedes ajustar tiempo de expiración de esas cookies y otros parámetros

Adicionalmente puede influir:
url_rewriter.tags

si pese a propagar el SID en cookies persiste el SID en el URL (creo recordar que me dió problemas una vez en un servidor ) desactiva esa directiva (con # delante) o bien vacia los tags con "" )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 16/04/2004 a las 12:04
  #7 (permalink)  
Antiguo 16/04/2004, 21:24
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Lo que quiero hacer es ...

Hola:
En realidad lo que quiero es propagar ese SID por URL es decir que mi dirección sea así en el navegador:
Cita:
usuariosadmin.php?action=admin&category=usuarios&o ption=show&type=0&ses=4a1a09a3c643e2846ebd8da0b86f 7cab&idusuario=1
pero no se como hacerlo.

Ah!! Otra cosa. Como puedo evitar que cuando el usuario de atrás en el navegador o abra una ventana nueva desde donde está iniciada la sesión esta se destruya y no deje acceder a las páginas de administración. Es decir, si estoy en una ventana en la cual tengo iniciada la sesión y por x o y tengo que recargar la página por algún error me vuelve a abrir la sesión. Al igual me pasa que si doy CTRL+N (en el caso de IExplorer en Ingles) o CTRL+U (en el caso de IExplorer en Español) y abro otra ventana desde la actual puedo acceder a todas las páginas sin tener que iniciar sesión de nuevo. Hay alguna forma de corregir esto? Pos creo que es una grave vulnerabilidad

Salu2
__________________
Ing. Reynier Pérez Mira
  #8 (permalink)  
Antiguo 18/04/2004, 20:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Reynier ..

Probastes al leer la documentació oficial de PHP sobre sesiones:

www.php.net/session

No te lo digo por darmelas de ... sino por qué en el capítulo inicial del tema se explica que es el SID . como se puede propagar y todas las directivas de configuración que van afectar a como se propagará el SID (y que la mayoría ya te mencioné). Esa configuración de PHP se puede formazar (con ini_set()) para que tus scripts/aplicaciones se comporten igual ante diferentes configuraciones de PHP.

Lo mismo .. si lees ahí veras que directivas de configuración afectan al tiempo de expiración de la sesión y página (session.gc_maxtimelife y otra más que hay ..). Si tu propagas el SID por el URL tendrás que ajustar a poco tiempo esa directiva (entre otras) por qué sino tu sesión (ID) será todavía válido (por eso te hacía mención que es más seguro propagar el SID en cookies y con tiempo de expiración de cookie = 0 (session.cookie_expire = 0) ..)

El tema de que abras unas ventanas nuevas desde tu sesión iniciada con tu "ctr+u" o lo que te dé la gana siempre vas a tener el SID ahí propagado sea por el URL o bien en cookies. Las sesiones debes conocer que sólo son válidas para el cliente que las inicie .. no para nadie más. No veo donde está el problema de seguridad en ese caso cuando las ventanas que se habren son en el mismo cliente (navegador) yo lo veo como comodidad no como falla de seguridad .. Tus aplicacones son las que deben controlar por ejemplo que ID de un registro pretendes accionar sobre el (borrar/editar/actualizar .. etc) antes de hacer cualquier acción y que no te ocurra que si abres X ventas de tu aplicación que gestiona una Base de datos .. por un lado estés editando un registro y por otro lo estés borrando, pero esto ya no es aplicable sólo para ese cliente que está trabajando en varias cosas a la vez sino en todos los accesos a esa base de datos desde otros clientes .. así que .. insisto .. no veo claro donde está el problema de seguridad.

Lo que debes preocuparte es de trabajar con tiempos de expiración cortos para las sesiones y hacer funcionalidades para salir de tu aplicación que maten la sesión activa (el "logout") de forma segura para los que usen dicho "botón" y los usuarios "despistados" que no lo hagan .. ya lo hará tu configuración de PHP.

El problema vendrá (de seguridad) cuando en una sesión válida y activa propagues el SID a otro PC (ejemplo en un link que mandas por e-mail .. por un foro .. o como sea). (por eso insisto que son más seguras las cookies para propagar el SID en lugar que por el URL pese que esto dependa de un cliente que acepte cookies))

En fin .. que las sesiones les importa muchoooooooooo la configuración de PHP y por eso hay que leer SI o SI la documentación.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 19/04/2004, 08:33
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Cluster y ...

Cluster entonces si me dices que le de un tiempo de expiración corto, como se si el usuario, en este caso el administrador, todavía está trabajando en el sitio o realizando algo en la administración, es decir, si mato la sesion después no me traerá problemas en las páginas donde compruebo si están iniciadas las sesiones.

Salu2
__________________
Ing. Reynier Pérez Mira
  #10 (permalink)  
Antiguo 19/04/2004, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues de eso se trata .. de verificar la existencia de tu sesión antes de actuar sobre tus Base de datos y demás procesos para darle el mensaje al usuario de que "su sesión expiró" (por qué PHP caducó la sesión automáticamente según las directivas que te mencioné). Lamentablemente esto sería engorroso si estubiera tu usuario actuando sobre un formulario .. lo rellena .. le dá al submit y PHP decide (al ejecutarse tu script que valida la sesión) que ya no es válida la sesión .. Para evitar eso, puedes recargar la página o mejor un frame/iframe oculto que haga peticiones al servidor cosntantemente como para que se pueda dar un aviso al cliente lo más exacto posible de que su sesión expiró ..

Ejemplo ..
En un iframe oculto o frame de tamaño 0 .. metes una pagina HTML que tenga un <meta> de refresh y que a su vez sea algo tipo:

Código PHP:
<html>
<head>
<meta refresh .......>
</head>
<body>
<?
session_start
();
if (!isset(
$_SESSION['nose'])){
?>
<javacript languaje='javascript'>
alert('su sesion expiró')
</javascript>
<?
}
?>
</html>
De esta forma .. se lanza una ventanita javascript si la sesión (alguna variable de sesión) no existe(propaga el SID si no propagas el SID en cookie en el <meta> a la hora de llamar a la página que refrescas .. que será si misma).

Así son las "sesiones" y PHP .. PHP no se enterará del tiempo o de lo que está haciendo el usuario hasta que no pida una página al servidor (recargues la página, mandes un link .. mandes un formulario ... etc ..)

Si propagas el SID en cookies con tiempo de expiración (de la cookie) = 0 y juega con el tiempo de session.gc_maxtime_life .. El SID no quedará en historiales de navegadores y la cookie muere al cerrar hasta la última ventana que puedas tener abierta de tu sitio. Por defecto PHP le dá 1440 segundos (sobre 24 minutos o algo así) a la expiración del SID .. En teoría en esos 24 minutos te puedes mover por ventanas que abras y links que muevas en tu sitio. Y si cierras el sitio (todas sus ventanas) la cookie muere y ya no se propagará el SID que estubieras usando (la sesión seguiría activa .. pero como no tienes el SID .. pues PHP al próximo session_start() creará uno nuevo = otra sesión (otro archivo sess_23434adfasdf)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 16:39.