Foros del Web » Programando para Internet » PHP »

guerra con sessiones. autentificacion

Estas en el tema de guerra con sessiones. autentificacion en el foro de PHP en Foros del Web. Hola Amigos. Sigo con dramas, pero la verdad es que no se si es por las seciones. tengo un html donde envio las variables de ...
  #1 (permalink)  
Antiguo 11/01/2005, 14:16
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
guerra con sessiones. autentificacion

Hola Amigos.
Sigo con dramas, pero la verdad es que no se si es por las seciones. tengo un html donde envio las variables de autentificacion $nombre y $codigo. (uso register_globals =on) con esto se supone no hay que usar (en <form....) el method ="post" ni get. a pesar de que las recomendacion es usarlos.

1)porque no se recomienda?, si se en vez de modificar el php.ini se podria ocupar:
ini_set("session_register","1");
ademas que con esto solo uso las variables sin tener que $var=$_post['var'];
sin embargo, y no se si por esto, las variables que les mencione $nombre y $codigo, llegan a la seguna!!!!.???, es decir entra cuando reintento.

creo como les digo que no es seciones, pero sigo sin dominar mucho el tema,he leido manuales, faq y varias ayudas que gente como cluster saben dar con mucha excactitud, incluso tiene un autentificador free, entonces como no me gusta copiar sino aprender le pediria, con mucho respeto, alguna guia pero mas avocada al problema de configuraciones, de si usa esto hay que usar esto otro... quiza de para un manual. pero bueno a ver si es posible.

Agrego el codigo:

<?php
echo $nombre .",".$codigo;
session_start();
if (isset ($_SESSION['nombre'])){
// Si está una sesión activa -> mata sesion
// todo el código del link del manual oficial de PHP que te dejé .. +
session_unset();
session_destroy();
// redireccionar aquí mismo ..
header ("Location: secion.php");
exit;
}

include("conexion.php");
$link=Conectarse();
$query="SELECT codcar, nombre FROM carteros WHERE nombre = '$nombre' AND codcar = '$codigo' ";
$consultar=mysql_query($query,$link);
if (mysql_num_rows($consultar)>0)
{
$_SESSION['id_sesion']=session_id();
$_SESSION['nombre']=mysql_result($consultar,0,"nombre");
$_SESSION['codigo']=mysql_result($consultar,0,"codcar");
//$_SESSION['autentificado']="si";

echo "<br>"."en la query ". $nombre .",".$codigo;
echo "<br>"."nombre ".$_SESSION['nombre'];
echo "<br>"."query ,codigo ".$_SESSION['codigo'];

//header("Location: usuario.php");
}else{
echo "<br>"."al principio ". $nombre .",".$codigo;
echo "query else ,nombre ".$_SESSION['nombre'];
//header("Location: inicio.php?error=si");
exit();
}
mysql_close($link);
?>

  #2 (permalink)  
Antiguo 11/01/2005, 14:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. Tal vez un "cambiazo" de una variable que te llegue por POST y te la "meten" por GET a tu script no te presente mucho problema de seguridad .. pero si si fuese una de sesión por ejemplo.

Nadie dice que tengas que hacer $var=$_GET['var'] .. siempre puedes usar directamente $_GET['var'] .. eso sí con unas "teclas" más que pulsar para escribir el nombre de la varaible.

En una de las primeras FAQ's tienes una dedicada a los problemas de seguridad de usar por ejemplo cosas tipo "register_globals a OFF" y asumir como globales varaibles de sesión como en tu ejemplo lo estás haciendo o esperando tomar así sus valores en algunos puntos ..

----------------------

Sobre el tema de sesiones .. en general al igual que las cookies ... su valor no puedes tomarlo o mejor dicho "queda disponible" hasta la siguiente petición al servidor (recarga de página, script que saltas o cambias .. etc).. Es decir .. no puedes hacer cosas como

$_SESSION['variable']="valor";
y esperar tomar su valor a continuación con un :
echo $_SESSION['variable'];

para que -realmente- el valor de tu sesión sea el que contiene .. tendrías que recargar la página al menos para obtener su real valor. o ahí .. definir su valor y leer esa variable de sesión en otro script.


En tu caso particular .. esas variable $nombre y $codigo .. no sé de donde salen: será de un formulario? .. son las variables de sesión? .. (ves por qué es tan importante definir y usar el método que se use? .. así no hay forma de saber de donde salen .. es más se pueden hasta confundir o "solapar" sus valores sobre todo si usas register_globals a ON ..).

$query="SELECT codcar, nombre FROM carteros WHERE nombre = '$nombre' AND codcar = '$codigo' ";

En otro lado del script haces:
if (isset ($_SESSION['nombre'])){
// Si está una sesión activa -> mata sesion
// todo el código del link del manual oficial de PHP que te dejé .. +
session_unset();
session_destroy();
// redireccionar aquí mismo ..
header ("Location: secion.php");
exit;
}

dice el código "si está definido la variable $_SESSION['nombre'] .. entoncces destruye la sesión y redirecciona hacia secion.php .. Es decir . .matas toda la sesión ? .. Se supone que ese código completo que presentas se llama "secion.php"

Por lo demás .. al usar $_SESSION (los arrays superglobales) debes usar:
unset($_SESSION) en lugar de session_unset();
(según recomendaciones de PHP.net)

Un saludo,
  #3 (permalink)  
Antiguo 11/01/2005, 17:50
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
Claster, quisiera hacert una humilde apreciacion, yo uso mucho esto "$_SESSION['variable']="valor";
y esperar tomar su valor a continuación con un :
echo $_SESSION['variable'];
"; y simpre me funcionó sin nigun problema, sera porq tengo registers_globaols en 'on' ?
  #4 (permalink)  
Antiguo 13/01/2005, 05:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En ese punto haciendolo así realmente no es el valor de tu sesión (el que va a quedar disponible para otros script que accedan a esa variable de sesión).

Es decir . .que si otro script de tu aplicación pretende en ese instante leer $_SESSION['variable'] no tendrá tu "valor" sino el que tenía antes ..

Un saludo,
  #5 (permalink)  
Antiguo 17/01/2005, 05:16
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
Cluster, sicerament no entiendo... Si con: echo $SESSION['variable'] me esta mostrando "valor", significa q cualquier script q haga mensión a $_SESSION['variable'] va a obtener "valor" y no el contenido q tenía antes...
Saludos... !!!
  #6 (permalink)  
Antiguo 17/01/2005, 05:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
leandroenrique

Las sesiones son independientes para cada cliente que las inicia ..

Si tu haces:
$_SESSION['variable']="valor"
y en ese mismo script haces:
echo $_SESSION['variable'];

Vas a ver "valor" .. Pero no es el valor que tiene tu sesión en el servidor (si tienes oportunidad abre tu SID creado en el servidor en ese instante y verifica que valor tienen "variable" .. a eso es a lo que me refiero. Sólo queda "registrado" tu variable de sesión cuando hagas la próxima petición al servidor (recarga de página o cambies de script por un link o similar).


Un saludo,
  #7 (permalink)  
Antiguo 17/01/2005, 16:42
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
gracias Cluster, a ver si entendí: si abro otra pestaña del Mozilla por ej. y quiero utilizar $_SESSION['variable'] en otra pagina de mi sitio, la misma va a contener un valor anterior al asignado con "valor" ?? ¿Que es el SID y como lo puedo abrir?
  #8 (permalink)  
Antiguo 18/01/2005, 06:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Abriendo otra pestalla de tu navegador .. vas abrir una nueva sesión. Se trata de que "continues" con la sesión activa . .para eso desde script A .. lanzas o llamas a B ya sea por un link, o similar .. no abrir un nuevo navegador y llamar a un script individual.

En las FAQ's de este foro tienes una explicación sobre el "SID" y la documentación oficial de PHP al respecto: www.php.net/session

Un saludo,
  #9 (permalink)  
Antiguo 19/01/2005, 05:57
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
Mil gracias Cluster !!! ahora entiendo...
Saludos...
  #10 (permalink)  
Antiguo 21/01/2005, 05:49
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
Aprovecho Cluster para hacert una pregunta q me esta volviendo loco: ¿como puede ser q al cerrar el navegador (Mozilla) y abrirlo de nuevo NO se destruyen las variables de sesión? con IE no pasa eso. ¿Es la configuracion del Mozilla la q tengo q modificar? Otra: después de un determinado período de inactividad (30 aprox.) las varibles de sesion caducan sin haberlo especificado en ninguna parte. ¿A q se debe eso?.
Gracias desde ya, saludos...
  #11 (permalink)  
Antiguo 21/01/2005, 13:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Aprovecho Cluster para hacert una pregunta q me esta volviendo loco: ¿como puede ser q al cerrar el navegador (Mozilla) y abrirlo de nuevo NO se destruyen las variables de sesión? con IE no pasa eso. ¿Es la configuracion del Mozilla la q tengo q modificar?
Siempre que tengas problemas con sesiones debes indicar como propagas tu SID .. al parecer lo haces por cookies y es esta la que no "muere" definitivamente al usar tu navegador Mozilla (hablando siempre que cuando dices "cierro" es que no queda ninguna ventana abierta de tu aplicación). No sé que configuración hay que "tocar" en Mozilla para solventar el problema .. pero deberías investigar por el tema de como trata las cookies Mozilla.

Cita:
Otra: después de un determinado período de inactividad (30 aprox.) las varibles de sesion caducan sin haberlo especificado en ninguna parte. ¿A q se debe eso?.
Eso lo define la directiva (php.ini) session.gc_maxtimelife que por defecto está a 1440 segundos que vienen a ser unos 24 minutos. Esa directiva es la que realmente decide que validez tiene un "SID" (una sesión) cara al servidor .. otra cosa será como propagas el SID .. por qué si lo haces en cookies (session.use_cookies = ON) .. cara al "cliente" ese SID tendrá de validez un mínimo de lo que la cookie que se crea en el cliente y propaga ese SID queda en el mismo .. por defecto suele ser "0" (cero) que significa "cookie de sesión", es decir .. "muere" la cookie cuando cierras la última ventana de tu aplicación.

En las FAQ's de este foro PHP .. ´(y si usas el buscador del foro) tienes más explicaciones teóricas sobre sesiones (y el dichoso SID).

Un saludo,
  #12 (permalink)  
Antiguo 21/01/2005, 15:25
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
mil gracias Cluster!!! era algo q me tenía bastante preocupado... voy a revisar lo q me decís.
Saludos...
  #13 (permalink)  
Antiguo 11/02/2005, 08:14
 
Fecha de Ingreso: febrero-2004
Mensajes: 24
Antigüedad: 20 años, 2 meses
Puntos: 0
Cluster esta es mi configuración de mi php.ini (la part de session).
Me podrías decirme q es lo q tengo q cambiar para q "mueran" las variales de session al cerrar la última página de mi aplicación? aparentement por lo q leí, con esta configuración tendría q funcionar bien pero no "mueren". Yo utilizo $_SESSION['variable'] o aveces $HTTP_SESSION_VARS['nom'] nunca $HTTP_COOKIE_VARS

Session Support enabled
Registered save handlers files user mmcache

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 10 10
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php4 /var/lib/php4
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off

Espero q me puedas ayudar y q sea algo de esta configuración y no de la configuración del Mozilla, porq ya le toque de todo
SALUDOS...
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 18:10.