Foros del Web » Programando para Internet » PHP »

sesion

Estas en el tema de sesion en el foro de PHP en Foros del Web. Hola.. un saludo... Tengo una sesion que en cada script es cargada con session_start(); Tengo problemas en el momento de pasar por algunas páginas o ...
  #1 (permalink)  
Antiguo 29/03/2004, 12:42
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 15 años, 1 mes
Puntos: 1
sesion

Hola.. un saludo...

Tengo una sesion que en cada script es cargada con session_start();

Tengo problemas en el momento de pasar por algunas páginas o otras aplicaciones, necesito saber como hago para preguntar si esta sesión existe y que si no existe que la cree de nuevo... pues asi.. si en algún momento se destruye o elimina... cuando verifique puede crearla de nuevo...

como lo puedo hacer??
  #2 (permalink)  
Antiguo 29/03/2004, 13:02
 
Fecha de Ingreso: marzo-2004
Mensajes: 40
Antigüedad: 13 años, 8 meses
Puntos: 0
hola


cuando creas una sesion le das una variable y la registras

session_start();
session_register("autentificado");
$autentificado = $si;


despues en las otras pagina preguntas de esta forma (al inicio de la pagina)


<?
session_start();

if($_SESSION["num"] !="si"){

//si no esta registrada la sesion lo mandas al inicio

header("Location: index.php");
exit();


}else {

haces lo que te de la gana

}



un saludo...
  #3 (permalink)  
Antiguo 29/03/2004, 13:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

session_start() crea una sesion vacia si no existe ninguna sesion para esa sesion. Puedes comprobar si existe una variable de sesion con isset() (www.php.net/isset) y el superglobal $_SESSION:
Código PHP:
session_start();
if (!isset(
$_SESSION['variable'])) {
  
creamos de nuevo la variable;

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 29/03/2004, 17:09
 
Fecha de Ingreso: marzo-2004
Ubicación: Bogota
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
hola, un saludo..

Tengo una pregunta con respecto al registro de sesiones, por ejemplo cuando un usuario entra por medio de su login , se registra una variable, el problema es si tu abres otra ventana del navegador y te registras como otro usuario, resulta que esa variable se sobreescribe con el nuevo valor y se pierde la del primer usuario, como hago para que esto no suceda?para que la otra variable aunque tenga el mismo nombre tenga otro identificador de sesion, o no se algo para mantener estas sesiones, agradezco la informacion.....gracias
  #5 (permalink)  
Antiguo 30/03/2004, 02:53
Avatar de fermartinfer  
Fecha de Ingreso: diciembre-2003
Mensajes: 84
Antigüedad: 14 años
Puntos: 0
Las variables super global hay que pasarlas de pagina en pagina, o una vez creadas ya se mantienen en memoria durante la sesion de usuario.

Mi caso en particular es una pagina con varios idiomas, entonces la idea es que el user selecciona el idioma cunado entra a la pagina y ya mantener el valor seleccionado durante toda la navegacion

saludos
  #6 (permalink)  
Antiguo 30/03/2004, 06:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Las variables "superglobales" se refieren como "superglobal" a que están presentes en todo el ambito de un script (scope) .. es decir .. las puedes solicitar en tus funciones sin necesidad de declararlas como globales con "global $_xxxx['variable']" por qué ya lo són.

Pero, .. ninguna variable de PHP prevalece su valor cuando cambias de script .. Para eso tienes que declarar variables en cookies o sesiones y .. si usas los arrays superglobales para esto usarías: $_COOKIE (para leer una cookie y setcookie() para crearla) o $_SESSION (para leer y escribir una sesión junto con el inicio de sesiones session_start() ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 30/03/2004, 07:34
Avatar de fermartinfer  
Fecha de Ingreso: diciembre-2003
Mensajes: 84
Antigüedad: 14 años
Puntos: 0
Gracias Cluster , todo lo que me dices me aclara mis dudas

Un saludo
  #8 (permalink)  
Antiguo 30/03/2004, 14:19
 
Fecha de Ingreso: marzo-2004
Ubicación: Bogota
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Cluster o fermartinfer, no se sino les entendi o no me hize entender, por eso escribo un codigo resumido para aclarar, y esta distribuido en tres paginas asi:

En la primera pagina un user selecciona una numero y la envia a la pagina 2:
<select name='pruebas' size='1'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>

En la segunda pag registro la variable que viene del formulario y hay un link a otra pagina, a la tercera:
session_start();
$nota=$HTTP_POST_VARS[pruebas];
session_register('nota');

En la tercera pag :
session_start();
echo "esta es la variable que debe pasar $nota ";

El problema con esta variable registrada es que si tua abres dos navegadores: con uno tu seleccionas el numero 1 y haces clik a la pag 2, hasta ahi bien, luego con el otro navegador seleccionas el numero 2 y haces click a la segunda, luego abres nuevamente la pag del primer usuario que escogío el numero 1 y que se encuentra en la segunda pag y haces clik a la tercera, en esta debe aparecer el numero uno pero sorpresa aparace el numero 2 del otro usuario, porque este fue el ultimo que se registro y sobreescribio a la primera, nose si me hize entender, como hago para que esto no suceda?, para que las dos varibles registradas sean diferentes. Gracias y que pena el enredo.
  #9 (permalink)  
Antiguo 30/03/2004, 14:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo te recomiendo una vez mas si usas PHP 4.1.0 usar los arrays superglobales $_SESSION para trabajar con tus variables de sesión .. o en su defecto minimo $HTTP_SESSION_VARS pero -nuca- asumir como globales las variables de sesión .. es probable que por ahí tengas problemas al no discriminar las variabels de sesión con las de otro tipo ..

Haz tus pruebas con un sólo proceso y luego con esa prueba de abrir vários navegadores a la vez. En teoría .. si tu abres un navegadro nuevo se continua la sesión que usastes dependiendo de como propagues el SID (Identificador único de sesión) así que si estás trabajando con sesiones en X ventanas sobre un mismo proceso sería normal que sucedirea lo que propones ..

El SID .. identifica a tu sesión y se propaga en tus páginas para seguir con la sesisión activa. (sea por cookies, o por el URL .. pero si propagas un ID de sesión válido y activo (caso de abrir X links desde una página que creó esas sesiones ..) continuaras sobre la misma sesión).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 02/04/2004, 17:11
 
Fecha de Ingreso: marzo-2004
Ubicación: Bogota
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Cluster; muchas gracias si efectivamente funciona , el cuento es que si un usuario ya inicializo una session y habre una ventana por Ctrl + U el sigue trabajando sobre las misma session, el proceso correcto es que habra una nueva ventana a través del acceso directo del explorador, para que inicilize una session diferente y los procesos no se sobreescriban, pero ahora estoy en el intento de que el script detecte que la ventana fue abierta por Ctrl + U y si habra una nueva session sabes algo?
  #11 (permalink)  
Antiguo 05/04/2004, 07:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. el problema no deberías solucionarlo detectanto un "ctrl + U" de un navegador .. sino que fuera tu aplicación que mendiante algún típo de "flag" (bandera, estado) determine si el usuario ya está en un proceso dado.

Para esto, tal vez te vendría bien usar algún tipo de "ID" aleatorío propio (no el SID de sesiones) que generes en todas las recargas/llamadas de tus páginas y propagues tu manualmente por el URL tal vez o coookies...

Pero .. el caso es que no se cual es el fin de que un usuario no abra X ventanas de la misma sesión y trabaje con ellas sobre tu aplicación .. Si tu siempre compruebas la existencia de tus datos que usas no deberías tener problemas:

Ejemplo:
Si en X ventana abro un proceso que lista X registros y tengo X ID's como opcines para borrar registros de mi BD y por otro lado abro otra página con el mismo listado para actualizar/borrar o ingresar más registros a esa tabla (BD) .. Si siempre al realizar esas acciones (borrar/actualizar ..etc) reviso la existencia de tal ID a borrar/actualizar etc .. No tendría que tener problemas al intentar por ejemplo "actualizar" un registro que "borré" en otra ventana abierta de la misma aplicación en otro proceso ... Y a todo esto .. trabajar siempre con Identificadores únicos y autonuméricos en tus BD para estas operaciones .. así no tendrás duplicados y los ID's serán Únicos.

Por supuesto que si no haces esas comprobaciones y para más remate usas como identificadores para estas acciones (borrados/actualizaciones de registros) campos "key" (clave) que no sean únicos podrías tener muchos problemas si por un lado inicias un proceso para X acción y en otro lado abres otro proceso para Y acción ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 05/04/2004, 11:51
 
Fecha de Ingreso: marzo-2004
Ubicación: Bogota
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Cluster muchiiiiisisimas gracias tu informacion me ha sido vital, y a proposito de manejo de sesiones tu has trabajado con la funcion Msession de referencia de funciones?, quisiera saber como lo utilizo y que ventajas tiene, yo estuve leyendo el manual de php en el capitulo LXVI y abri esta dir http://devel.mohawksoft.com/msession.html pero no logro entender su funcionamiento, me puedes decir algo?
Gracias..
  #13 (permalink)  
Antiguo 05/04/2004, 12:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No he usado sistemas alternativos de gestión de sesiones fuera del "oficial" y "por defecto" de PHP .. pero, ese sistema que mostrastes no es el único. Lo bueno que tiene es que una extensión de PHP .. lo cual puede hacer funcionar bastante rápido el tema .. pero por lo mismo si no usas un servidor con el soporte a dicha extensión (un servicio de hosting . por ejemplo) no podrás usarla ..Yo prefiero usar extensiones "standars" o que vienen con el própio cuerpo de PHP o bien la versión "classe" (objeto .. o simples funciones) de la misma.

De hecho tu misma puedes hacerte el tuyo para .. por ejemplo cambiar el "handler" donde PHP guarda sus sesiones en lugar de archivos de texto plano como lo hace por defecto ("files") usar Base de datos por ejemplo y así crear sesiones "persistentes" estilo cookies (que es lo que suelen hacer esos sitemas como "añadido")

Todo eso lo puedes ver en su base en:
http://www.php.net/manual/en/functio...ve-handler.php

Y en sisitos como www.phpclasses.org puedes ver más sistemas de sesiones que se basan en ese principio de cambiar el "handler" por defecto de PHP.

Un saludo,

Última edición por Cluster; 05/04/2004 a las 12:18
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:05.