Código PHP:
<?
echo session_id();
?>
¿Es a esto a lo que os referis a que la propagación de una sesión es insegura comparándola con el control por cookies?
Gracias
| ||||
Buenas, ya he arreglado el tema de tener siempre una session creada, ya se haya autentificado o no el usuario, pero me encuentro con el siguiente problema, cuando me autentifico en cuanto cambio de página no me mantiene la session, os dejo el código a ver si véis donde me he podido equivocar, gracias. Código PHP: |
| |||
Si tu defines un nombre de sesión .. debes usarlo siempre en todo uso de sesiones que hagas en tu aplicación: session_name ($user); session_start(); Si eso lo haces ahí .. también tienes que hacerlo en otros inicio de uso de sesiones que uses .. es decir .. el mismo valor de $user .. antes de session_start() para la función session_name(). Sino, vas a trabajar con dos sesiones diferentes .. una (cuando fuerces el nombre de tu sesión por session_name()) con el nombre por defecto que PHP le dá a las sesiones (que lo define php.ini en su session.nomeacuerdo directiva) y otra con el nombre que le distes al usar session_name() Lo único que veo es que estás confundiendo lo que significa usar un nombre de sesión (o definirlo) .. Las sesiones son únicas para el cliente que las crea, para eso tienes el SID (Identificador único de sesión) que las hace únicas y las relaciona con el cliente que las crea. Definir un nombre de sesión en base a un dato de los que pueda propagar como ese "$user" .. la verdad no le veo mucho sentido .. y más cuando ya propagas esa variable en la sesión ($_SESSION['username']=$user;). Recomendación .. no uses session_name() por lo menos de esa forma. Si quieres, usa un nombre de sesión "personalizado" para todo lo que haga tu aplicación (nombre fijo) .. pero insisto que no es para nada necesario ni tampoco ofrece ninguna utilidad práctica (o la desconozco) salvo esa personalización. Por otro lado .. si tu haces una validación tipo: if(!empty($_SESSION['username'])){ sin haber usado session_start() -antes- de pretender acceder a $_SESSIOn . .SIEMPRE te va a devolver "null" (vacio) .. debes usar session_start() si o si para realmente ver si esa "variable" en tu sesión está definida y con algún valor .. No te preocupes por el SID si tiene el mismo IDentificador antes de tu autentificación o cuando pase tu validación de tu usuario .. Lo que "Manda" es la validación de la existencia de esa variable que ahí defines "$_SESSION['username']", por qué tu la creas sólo cuando pasas tu validación (por tu consulta a tu servidor LDAP y autentificación de tu usuario). Cuando no pasa dicha validación .. NO la creas por enden no existe. Un saludo, |
| |||
una pregunta.. que interes se puede tener en usar varias sesiones.. o darles nombre? ( ahora mismo no se me ocurre ningun ejemplo.. que seguro que los hay y son evidentes pero..) saludos |
| |||
Cita: Un ejemplo a mano ..
Iniciado por cyborg una pregunta.. que interes se puede tener en usar varias sesiones.. o darles nombre? ( ahora mismo no se me ocurre ningun ejemplo.. que seguro que los hay y son evidentes pero..) saludos Este sitio usa sesiones para almacenar todos los datos sobre tu autentificación en el sistema, preferencias y demás información mientras estás en el sitio (se obtiene UNA vez de tu BD o incluso cookie y de ahí se usa como variables de sesión). Todo muere (variables de sesión) cuando sales del sitio (sea por tu logout o cerrando tu navegador). En general .. las variables que uno propaga en una sesión NO viajan al cliente (por el URL o en una cookie) .. así que no tienes problemas de cantidad de variables a propagar. Tienen validez por el tiempo que dure tu sesión .. se asignan al cliente que las crea .. son seguras (nadie las puede alterar pues esos datos están en el servidor). Un saludo, |
| |||
Cita: Podrías usarlo así en un proyecto muyyy grande .. pero en realidad es más lio andar cambiando de nombre de sesión que simplemente gestionar por ejemplo un array en tu sesión para "ordernar" esos datos que tengan alguna relación entre sí .. sin mezclaros con otros. De hecho no he visto ninguna aplicación que haga ese uso de sesiones por nombre de sesión en una misma sesión (valga la rebundancia).
Iniciado por cyborg si.. pero una sesión.. pero crear sesiones distintas? y darles nombre? para que? p.d: si me has respondido no me he enterado :p saludos Un saludo, |
| |||
Cita: te refieres a usar variables de sesion para pasar cosas como esta?
Iniciado por Cluster Podrías usarlo así en un proyecto muyyy grande .. pero en realidad es más lio andar cambiando de nombre de sesión que simplemente gestionar por ejemplo un array en tu sesión para "ordernar" esos datos que tengan alguna relación entre sí .. sin mezclaros con otros. De hecho no he visto ninguna aplicación que haga ese uso de sesiones por nombre de sesión en una misma sesión (valga la rebundancia). Un saludo, $_SESSION['username']? si es otra cosa.. estoy muy torpe pq no pillo :p saludos |
| ||||
Buenas Cluster, creo que llegué a entender lo que me comentabas sobre las sesiones, adjunto el código por si ves algo raro que no te concuerde, aunque creo que me funciona correctamente. Estoy abierto a cualquier cosa que pueda mejorar el código, sobre todo en cuanto a seguridad se refiere. Gracias. Código PHP: |
| ||||
Buenas, me gustaría seguir con este tema para preguntaros sobre la seguridad del código que podéis ver en el mensaje anterior. ¿Es realmente seguro? ¿Se puede mejorar? o mejor dicho, que mejorarías del código, no es necesario que me escribáis código, con alguna explicación me valdría, aunque tampoco venga mal algo de código, gracias. |
| |||
Cita: ¨Si .. eso simplemente .. pero como variable de sesión y "array" que es $_SESSION ya de por sí .. si tu quieres, almacena un array más para tener ordenado tus variables:
Iniciado por cyborg te refieres a usar variables de sesion para pasar cosas como esta? $_SESSION['username']? si es otra cosa.. estoy muy torpe pq no pillo :p saludos Código PHP: |
| |||
y hay limite de tamaño? pq vamos..... no se como de seguro sería..... pero se podria cargar una tabla.. en un array de sesion y asi controlar la variable de sesion en vez de estar accediendo a la tabla..... pero.... hay limite de valores en el array? es seguro? Y yo que mis ejemplos eran valores simples en las variables de sesion :p si el array es: $_SESSION['usaurios']=array("id"=>1,"nombre"=>"pepe","apellido"=>"ferna ndez"); como se accederia a cada valor? |
| |||
Cita:
Iniciado por cyborg y hay limite de tamaño? pq vamos..... no se como de seguro sería..... pero se podria cargar una tabla.. en un array de sesion y asi controlar la variable de sesion en vez de estar accediendo a la tabla..... pero.... hay limite de valores en el array? es seguro? Y yo que mis ejemplos eran valores simples en las variables de sesion :p si el array es: $_SESSION['usaurios']=array("id"=>1,"nombre"=>"pepe","apellido"=>"ferna ndez"); como se accederia a cada valor? Cita: El limite lo dará tanto PHP por el tamaño de memoria que pueda gestionar (que lo delimita la configuración de este en su php.ini) .. como del sistema de almacenamiento ("disco duro") de ese servidor o zona donde almacenas tus sesiones (en archivos por defecto según gestiona las sesiones PHP) .. Es decir .. el limite es bastante grande.y hay limite de tamaño? pero.... hay limite de valores en el array? es seguro? Y .. si .. sería seguro .. Entendiendo a que los datos los tenemos en el servidor. Cita: Pero .. para que quieres hacer eso? .. bajo que condiciones? .. Las Base de datos se inventaron junto con su lenguaje de acceso a ellas (SQL) justamente para prestarte ayuda y optimización a la hora de hacer consultas a esos datos ... Por ende .. si piensas usar un "array" (bidimensional como lo que tendrías ya en tu "tabla" de tu BD) para "consultarlo" .. dependiendo de las características de esos datos, creo que siempre sería más optimo consultar la BD .. Sobre todo por qué así obtendras los datos "frescos" (actualizados) de lo que tengas en tu BD .. no lo que "temporalmente" te llevastes a una sesión. Pero, claro .. todo depende del propósito que le des.pq vamos..... no se como de seguro sería..... pero se podria cargar una tabla.. en un array de sesion y asi controlar la variable de sesion en vez de estar accediendo a la tabla..... Cita: Te hago la pregunta al reves .. Si yo te doy un array así:si el array es: $_SESSION['usaurios']=array("id"=>1,"nombre"=>"pepe","apellido"=>"ferna ndez"); como se accederia a cada valor? $datos['usuario']=array("id"=>1,"nombre"=>"pepe","apellido"=>"ferna ndez"); como accederias a su valores? ..Bueno .. esto es simplemente para que veas a "$_SESSION" como un vulgar array que es. Lo accedes como si de cualquier otro tipo de array se tratase: echo $_SESSION['usuarios']['id']; // el ID del "usuario" echo $_SESSION['usuarios']['nombre']; // el nombre del "usuario" etc ... más info: www.php.net/array Un saludo, |
| ||||
Bueno, y como véis el código en cuanto a seguridad? Gracias. Por ejemplo, que es mejor para incluir un fichero con la configuración de conexión a base de datos, un include, un include_once, un require o require_once??? Código PHP: Código PHP: Véis bien que use el campo formage para controlar que se rellena el formulario? Código PHP: Seguro que se me ocurrirán bastantes preguntas, saludos y gracias. |
| |||
Cita: bueno.. evidentemente eso se podria hacer en una tabla con datos que no cambien.. no se.. algun codigo descripcion.. o todos los datos relativos a la persona logueada..así solo sería una consulta en la bbdd.. y no x consultas..
Iniciado por Cluster Pero .. para que quieres hacer eso? .. bajo que condiciones? .. Las Base de datos se inventaron junto con su lenguaje de acceso a ellas (SQL) justamente para prestarte ayuda y optimización a la hora de hacer consultas a esos datos ... Por ende .. si piensas usar un "array" (bidimensional como lo que tendrías ya en tu "tabla" de tu BD) para "consultarlo" .. dependiendo de las características de esos datos, creo que siempre sería más optimo consultar la BD .. Sobre todo por qué así obtendras los datos "frescos" (actualizados) de lo que tengas en tu BD .. no lo que "temporalmente" te llevastes a una sesión. Pero, claro .. todo depende del propósito que le des. Un saludo, no se.. es algo que se me ocurre.. igual es una tonteria. saludos |
| ||||
Además de las preguntas que hice dos mensajes anteriores y no me habéis podido responder (seguro que es por falta de tiempo), necesito saber como podría añadirle a este script que la sessión durase un tiempo después de dejar de navegar por ella pero sin que el usuario cierre la ventana del navegador, no se si eso podrá controlarse. |
| |||
Cita: Sobre el uso de include() .. requiere() o equivalentes . .Te recomendaría ver la documentación de PHP al respecto para salir de dudas.
Iniciado por PeiShar Además de las preguntas que hice dos mensajes anteriores y no me habéis podido responder (seguro que es por falta de tiempo), necesito saber como podría añadirle a este script que la sessión durase un tiempo después de dejar de navegar por ella pero sin que el usuario cierre la ventana del navegador, no se si eso podrá controlarse. www.php.net/include www.php.net/require Sobre todo fijate bien que error (tipo) se genera cuando falla la función (cuando no puede abrir/leer tu script a incluir). Ahí está el detalle. Por lo general .. datos "críticos" a incluir es recomendable usar require() en lugar de include() (por qué genera un error fatal si falla el require() vs al include que sólo un Warning y PHP procesa diferente estos tipos de errores .. uno para completamente la ejecución del script y el otro podría continuar la ejecución del script ocasinando problemas por otro lado si no están esos datos). Cita: Da igual .. el caso es que terminas la ejecución de tu scritp ahí mismo .. Eso sí .. si lo haces así como veras no generas una página HTML standar (con sus <html> .. </html>) y te quedas con la pantalla "en blanco" hasta que aceptas ese "alert" que a su vez no llevas a ningún sitio la página .. Usa mejor una redirección hacia tu formulario de login y ahí indica el mensaje de error (bajo una variable de control tipo: login.php?error=1 ... )Esta bien colocar este otro código? Código PHP: if ((!$pass) || (!$user)) { echo "<script>alert('Debes rellenar todos los campos. Inténtelo de nuevo por favor.'); document.location.href='index.php';</script>\n"; exit();} O es mejor mostrar el mensaje sin javascript. Cita: No, .. basate en la existencia de alguna de las variables que usas en tu formulario .. verificado por la función empty() .. no con un "NULL" .. La función empty() asegura dos cosas: existencia de la variable y valor distinto a NULL o 0 (todo en una). Esa variable "hidden" que contiene el valor "old" .. la verdad que no tiene mucho sentido existiendo otras variables en ese formulario .. De hecho .. ya lo haces con esa validación del $_POST['submit'] .. Véis bien que use el campo formage para controlar que se rellena el formulario? Código PHP: if (($formage=="old") && ($user!=NULL)) Cita: Bueno .. tu formulario de login .. apuntalo a:¿Como podría hacer para que el login llamara una web segura https:443 pero que la intranet siguiese en el http:80 para proteger la clave contra sniffers? <form action="https://nose/autentificacion.php" method="post"> y cuando valides en tu autentificacion.php .. redirecciona hacia otro URL por http .. El caso es que vas a tener problemas con las sesiones (sobre todo si propagas el cookies el SID), .. La sesión la crearas para el dominio seguro .. y no podras leerla en la zona NO segura .. Por qué no usas toda tu "intranet" bajo SSL? .. Un saludo, |