Foros del Web » Programando para Internet » PHP »

Sesiones en Menu hecho en DHTML

Estas en el tema de Sesiones en Menu hecho en DHTML en el foro de PHP en Foros del Web. Hola a todos..he leido bastante diria yo acerca de las sesiones pero lo que no logro entender es como propagar mi SID a traves de ...
  #1 (permalink)  
Antiguo 11/08/2004, 15:50
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Sesiones en Menu hecho en DHTML

Hola a todos..he leido bastante diria yo acerca de las sesiones pero lo que no logro entender es como propagar mi SID a traves de un menu general...ah por cierto el menu lo hice a través del DHTML pues tiene buenos diseños de menú.

Lei en uno mensajes respondidos que Cluster dice:

"" (no usar cookies)
Y propagar el SID en tus redireccionamientos javascript, Meta de refresh, header("location" ...) que hagas. ""

podrías darme un ejemplo de los dos primeros o sea con javascript y Meta de REFRESH porque con header si lo he hecho.....

Please quien pueda contestarme lo más pronto se lo agradecería un mundo...estoy desesperada...
  #2 (permalink)  
Antiguo 11/08/2004, 20:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. la cita está fuera de contexto ...

No es que debas propagar el SID por el URL de forma manual .. a no ser que realmente no quieras propagar el SID en cookies, .. por qué lo más cómodo y seguro para tu caso es propagar el SID en cookies y olvidarte de todo.

Para propagar el SID en cookies .. tan sólo lo indicas en la configuración de PHP (o vía ini_set() lo fuerzas):

session.use_cookies = 1
session.use_only_cookies = 1

Y desactivar: session.use_trans_sid = 0

Pero, ..si quieres propagar el SID por el URL .. en los casos que PHP no lo hace automáticamente si usas session.use_trans_sid = 1 (php.ini configuración de PHP), puedes usar "SID" como constante que es (sin comillas) o bien formar el SID desde las funciones session_name() que te devuelve el nombre de la sesión y session_id() que te devuelve el ID de sesión .. que todo junto es el "SID" (Identificador único de sesión) y que como ya sabras, es necesario que ese "SID se propague".

Si usas SID como constante .. sólo tienes que añadirlo como variable más al resto que puedas propagar por ese URL.

Un refresh típico ...
Código PHP:
<META HTTP-EQUIV=Refresh CONTENT="10; URL=http://www.htmlhelp.com/nose.php?<? echo SID ?>">
Pero si hay más variables que propagues en el URL:

Código PHP:
<META HTTP-EQUIV=Refresh CONTENT="10; URL=http://www.htmlhelp.com/nose.php?variable=<? echo $variable ?>&<? echo SID ?>">
Para javascript .. mas de lo mismo .. se trata de "concatenar" tu constante SID.

Código PHP:
<a href="#" onClick="window.location.href('nose.php?<? echo SID ?>'">
Y vía PHP con un header() de "Location .. " lo mismo:

Código PHP:
header ("Location: nose.php?".SID); 
O como gustes concatenar .. sólo tienes que tener presente que SID es una constante y como tal va SIN comillas.

También puedes obtener el SID:
Código PHP:
$mi_sid=session_name()."=".session_id(); 
Un saludo,
  #3 (permalink)  
Antiguo 17/08/2004, 15:02
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Gracias Cluster por tu ayuda me sirvio bastante...en verdad....
Disculpa por lo que puse la cita fuera de contexto es que soy nueva en esto y no me he familiarizado aún...

Ahora tengo otro problemita y estoy segura que muchos de ustedes me ayudaran...
Bueno el hecho es que yo tengo en una página "funcionario.php" el ingreso de datos del funcionario y al poner Guardar yo enlazo mi página a otra llamada "funcionario_ins.php" la cual hace que guarde los datos en la base pero antes verifico si el numero de cédula o rol ya existen y si ya existen mando un mensaje y automáticamente mando a la página anterior con
un script el cual escribo history.go(-1) "que es la pagina anterior" la hago así con el fin de no perder todos los datos y evitarle al usuario el trabajo de escribir nuevamente datos que ya ingresó y que por uno o dos datos repetidos no pudo ser exitosa el guardado..
Pero bueno el problema esta que cuando uso lo de las sesiones algunas veces me sale el mensaje típico de windows que dice "Haga click en Actualizar para actualizar la pagina" hago click y sí se me vuelve a la página que quiero pero lo malo es que sale borrado todos los datos que podrían servirle al usuario...
es mas es un requerimiento del sistema que no se borren...

Les agradecería me sugieran alguna solución...

Saludos a todos.....
  #4 (permalink)  
Antiguo 17/08/2004, 15:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La solución no es "desplazarse" por el historial de ese navegador .. sino el de reenviar desde tu script de PHP de proceso funcionario_ins.php las variables que recogió hacia el funcionario.php donde tienes tu formulario para pre-establecer sus valores inciales con lo que le vas a propagar por el URL

Ejemplo:
funcionario.php
Código PHP:
<form .. ....... method="post">
<input type="nombre" value="<? echo $_GET['nombre'?>">
</form>
funcionario_ins.php
Si la validación no es correcta ... Redireccionas automáticamente componiendo un URL con tus variabels que recibistes del formulario:

Código PHP:
header ("Location: funcionario.php?nombre=$_POST['nombre']"); 
Aquí en este "funcionario_ins.php" no debes usar nadaaa de HTML ni mostrar mensajes de error/exito .. debes hacerlos en "funcionario.php" que es donde redireccionas si hay un error por ejemplo.
Para esto último .. basandote en la existencia de alguna de esas variables que propagas podrías mostrar el mensajito de error en consecuencia tipo:

Código PHP:
<?
if (isset($_GET['nombre'])){
 echo 
"Hay un error .. revise los datos ...";
}
?>
Un saludo,
  #5 (permalink)  
Antiguo 13/09/2004, 11:42
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Hola Cluster entiendo tú manera de pasar las variables por la URL para captarla nuevamente de la página original de donde la mandé con el método post (form action.. method="post") pero tengo otra pregunta ..... no hay otra manera de capturar las variables sin que sea por la URL... porque que pasa cuando son bastantes datos que redireccionar...

Saludos Cordiales....
  #6 (permalink)  
Antiguo 13/09/2004, 15:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedes usar sesiones o cookies en combinación con el uso de los arrays asociados POST o GET ($_POST $_GET) propagando dichos arrays (enteros) en una sesión .. algo tipo:

script de proceso
Código PHP:
<?
session_start
();
$_SESSION['variables'] = $_POST;

// validas tus variables $_POST ... o $_GET
// si hay un error .. redireccionas al formulario
Y el formulario .. tomas las variables de la sesión:

session_start();
$_VARIABLES=$_SESSION['variables'];

para poder usar en los campos del formulario como valor predeterminado:

<input name="nose" value="<? echo $_VARIABLES['nose'] ?>"

Un saludo,
  #7 (permalink)  
Antiguo 29/12/2004, 14:12
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Control de sesiones al cerrar un browser

Hola Cluster como tú siempre me haz ayudado me atrevo a preguntarte algo.

Dime como puedo controlar lo de las sesiones cuando el usuario cierra por medio del boton superior del browser en la X ....porque dentro de mi sistema por medio de una opcion "Finalizar sesion" yo puedo destruir la sesion que él creo pero que pasa cuando no lo hace de esa manera sino que cierra bruscamente el browser; he fijado un tiempo límite para que expire la sesión si el sistema no está siendo manipulado, pero todo puedo darse dentro de ese tiempo cuando el usuario a dejado de usar el sistema...Por ejemplo puede ser que OTRO USUARIO acceda a dicha página del sistema ya que esta quedo guardada en la barra de
direcciones de la URL

Sorry que repeti el mensaje en Mensajes Privado pero no sé monear bien este foro del Web

Please ayudame
Saludos Cordiales a todos
  #8 (permalink)  
Antiguo 29/12/2004, 15:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
amayo ..

Esos temas los debes controlar con la expiración del SID (session.gc_maxtimelife) y teniendo encuenta como propagas el SID en tu aplicación .. no sé si lo haces por cookies o por el URL ..

Un saludo,

PD: no te dirijas a nadie en particular .. cualquier persona puede ayudar. Intenta poner tus mensajes en temas nuevos, este tema no trata sobre la "expiración" de una sesión .. sino sobre la propagación del SID.
  #9 (permalink)  
Antiguo 03/01/2005, 09:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Hola a todos...y gracias cluster por tu consejo..
Bueno les deseo a todos que tengan un lindo año.

Para comenzar les voy a dar una introducción de la situación.
Actualmente en el servidor tenemos 1 sistema de correo que se maneja por medio de PHP, la cual usa cookies por lo que en el PHP.ini en la etiqueta session.use_cookie=1;pero para mi sistema que estoy haciendo yo no he hecho por cookies si no que desplazo el SID manualmene por la URL por lo que en session.use_trans_sid = 0 pero de alli como PHP.INI está en el servidor y los 2 sistemas residen alli comparten el mismo archivo(php.ini). No sé, si será por lo de las cookies que session.gc_maxlifetime =60 no hace caso.

Pero ademas tengo que explicarle que dentro de cada pagina yo programé para que la session dure hasta 30 minutos cuando el sistema no esté usándose y esté abierto(como cuando tu abres un correo y se expire despues de un momento que no lo estes usando).

Entonces mi problema es cuando yo salgo del sistema sin aplastar el botón FINALIZAR SESION si no que cierra el navegador bruscamente o cambio de url en la barra de direcciones;la sesion se queda por 30 minutos alli(no hace caso al session.gc_maxlifetime()) y eso es lo que no quiero ya que la direccion queda almacenada en la url de las visitas anteriores, que puedo hacer para q al pasar eso elimine la sesion como lo hago al aplastar el boton Finalizar Sesión.

Saludos
  #10 (permalink)  
Antiguo 03/01/2005, 10:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si dices que usas session.use_cookies = ON (1) .. el SID se propaga por la cookie preferentemente . .es decir . .PHP toma el valor propagado en la cookie y si no está .. toma tus SID que propagas en el URL (sea semi-automático usando: session.use_trans_sid = ON .. o bien completamente manual si usas SID como constante y lo haces en tus links).

Por ende .. el tiempo de expiración del SID el que afecta en principio es el que define la duración de la cookie que PHP crea para la propagación del SID en cookies y en última instancia la que PHP le dá a un SID válido (...gc_maxlifetime).

Si quieres configuraciones diferentes para tus aplicaciones .. debes forzarla en todo script que uses o bien creando .htacces con tu configuración particular para cada aplicación.

Por ejemplo usando ini_set() para forzar tal forma de propagación del SID .. por ejemplo en tu caso si quieres hacerlo manualmente .. usar:

Código PHP:
ini_set("session.use_trans_sid","0");
ini_set("session.use_cookies","0"); 
Pero .. te recomiendo encarecidamente que propages el SID en cookies .. son más seguras vs que tu cliente (navegador) ha de aceptar cookies.

Un saludo,
  #11 (permalink)  
Antiguo 03/01/2005, 12:48
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Hola gracias por tu ayuda..

Gracias aplicare tu consejo para hacerlo con lo de las cookies. Pero tengo otra duda al hacerlo con lo de las cookies el tiempo de de la session eta en "session.cookie_lifetime = 0" como cuando paso la sesion por la URL con session.gc_maxlifetime???????

Otra cosa me imagino que al usar cookies lo de session_start(); en cada pagina igual va??????


Please ayudenme con esto.

Saludos
  #12 (permalink)  
Antiguo 03/01/2005, 13:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El tiempo de expiración que manda siempre en última instancia es:
session.cookie_lifetime

Pero .. si el SID es el indentificador único de sesión que "une" al "cliente" con el servidor y .. que en el caso de propagarse en cookies viaja en esa cookie (como valor) .. si pierdes el SID por qué la cookie expiró .. aunque el SID como tal y archivo esté en el servidor activo .. no te servirá de nada y no podrás recuperar lo que ese archivo de sesión creado en el servidor que lo identifica ese "SID".

Ahora .. si tu por A o B motivo .. hubieras leido tu cookie con ese SID y lo llamas .. (cuando la cookie expire) podrías recuperar los datos de esa sesión durante el tiempo de vida de la sesión: session.gc_maxlifetime .. Justamente para evitar problemas de seguridad por hacer eso .. desde hace ya unas cuantas versiones de PHP tienes a tu disposición la directiva: session.use_only_cookies que asegura que sólo se va a leer un SID de una cookie (del cliente que la creó) y además PHP guarda el "cliente" que la generó para extra-validación de la misma .. (por eso y algunos otros motivos son más seguras vs el detalle que debes avisar a tus usuarios que tus sistemas requieren de la habilitación de cookies en sus navegadores).

Una cookie de valor en el tiempo de expiración a 0 significa "cookie de sesión" es decir .. dura lo que el navegador (ventana) queda abierta .. cuando cierras todas (hasta la última) ventana de tu sitio .. la cookie (con el SID en ella) muere.

Cita:
Otra cosa me imagino que al usar cookies lo de session_start(); en cada pagina igual va??????
Si, va igual. En la configuración de PHP tan sólo ajustamos "como" queremos propagar el SID

Un saludo,

Última edición por Cluster; 03/01/2005 a las 13:52
  #13 (permalink)  
Antiguo 04/01/2005, 14:49
 
Fecha de Ingreso: agosto-2004
Mensajes: 17
Antigüedad: 13 años, 4 meses
Puntos: 0
Hola compañeros.....


Con la ayuda de cluster al referirse de que debo usar session_use_only_cookies=1 no lo encuentro en mi php.ini podrias decirme en que version se encuentra disponible tal directiva?

Ahora no sé si estoy entendiendo bien lo de session.gc_maxlifetime... Cluster quiere decir que si yo uso la directiva session_use_only_cookies=1 por mas que en mi php.ini tenga session.gc_maxlifetime=(valor cualquiera) no va hacerle caso a este ultimo?????

Si a lo que dije anteriormente es NO podrianme explicar para que sirve exactamente session.gc_maxlifetime...Please

Cluster al decir "Una cookie de valor en el tiempo de expiración a 0 significa" significa:
session.cookie_lifetime=0?????????


Saludos Cordiales
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 01:12.