Foros del Web » Programando para Internet » PHP »

la sesion no se destruye, por que??

Estas en el tema de la sesion no se destruye, por que?? en el foro de PHP en Foros del Web. que tal amigos; tengo un problemilla que no he podido resolver, resulta que modificando un sistema de prestamo bibliotecario (especificamente las sesiones), cuando hago clic ...
  #1 (permalink)  
Antiguo 17/09/2005, 16:32
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
Pregunta la sesion no se destruye, por que??

que tal amigos;

tengo un problemilla que no he podido resolver, resulta que modificando un sistema de prestamo bibliotecario (especificamente las sesiones), cuando hago clic en vinculo de cerrar sesión (el vinculo direcciona a otra página donde destruyo la sesion con session_destroy()), a veces si borra la sesión, pero a veces no ¿esta raro no?.

cabe mencionar que estoy usando el sistema de AUTENTIFICATOR de CLUSTER (muy bueno por cierto), pero aún así no logro hacer que se borren las sesiones.

como dato informativo, en las sesiones no uso cokies, sino que en el php.ini tengo habilitado la carpeta temporal de sesiones de esta forma:

ses_temp: c:\php4\sesiones (algo así)

no se si eso es lo qu esta provocando el problema.
alguna sugerencia o comentario sera bien recibida. gracias de antemano
  #2 (permalink)  
Antiguo 18/09/2005, 09:54
 
Fecha de Ingreso: abril-2005
Ubicación: Montevideo, Uruguay
Mensajes: 102
Antigüedad: 19 años
Puntos: 0
¿Te puedes tomar la molestia de postear las piezas de código afectadas? En este caso serían, ¿cómo estás levantando la sesión? ¿Cómo estás autentificando al usuario cando se logea? ¿Cómo estás destruyendo la sesión?
__________________
Mauricio Etcheverry

WebMaster de YoReparo.com
  #3 (permalink)  
Antiguo 18/09/2005, 10:25
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 21 años, 10 meses
Puntos: 1
Si no usas cookies para guardar las sesiones..entonces usas propagación de sesiones por transid? o las propagas tu mismo a mano?

recordarte q si usas transid...no funciona si llamas a la pagna desde un script de javascript...por lo tanto tienes q añadir el PHPSESSID a mano.

Salu2.
  #4 (permalink)  
Antiguo 23/09/2005, 10:29
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
tienes razón el master, debi poner codigo cuanto postee este mensaje, pero aqui va:

1. tengo un index.php el cual solo tiene 2 cuadros de texto: login y password que direcciona a una segunda página :principal.php.

dentro de principal.php al principio del archivo inlcuyo otro archivo: filter.inc.php (tomado y modificado del Autentificado de CLUSTER), este archivo (filter.inc.php), se encarga de verificar el login y password, asì como de levantar las sesiones, a continuaciòn el script (con permiso de CLUSTER):

Código:
<?php
//$nom_s = "x";
// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
//include ('../Connections/sapb_librarian.php');


// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
//con respecto a este "if", lo puse como comentario porque impide que habra algunos pop up's que uso en mi proyecto.
/*if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}*/


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['login']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("localhost", "librarian", "sapb") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("sapb");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT CONCAT_WS(' ',nom_bibliot,ap_bibliot,am_bibliot) as b,login_bibliot,password_bibliot,puesto,id_bibliot FROM bibliotecario WHERE login_bibliot='".$_POST['login']."'") or die(header ("Location:  $redir?error_login=1"));

 // miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 if (mysql_num_rows($usuario_consulta) != 0) {

    // eliminamos barras invertidas y dobles en sencillas
    $login = stripslashes($_POST['login']);
    // encriptamos el password en formato md5 irreversible.
    $password = ($_POST['pass']);
    //$password = md5($_POST['pass']);

    // almacenamos datos del Usuario en un array para empezar a chequear.
 	$usuario_datos = mysql_fetch_array($usuario_consulta);

    // liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    mysql_free_result($usuario_consulta);
    // cerramos la Base de dtos.
    mysql_close($db_conexion);

    // chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    if ($login != $usuario_datos['login_bibliot']) {
       	Header ("Location: $redir?error_login=4");
		exit;}

    // si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    if ($password != $usuario_datos['password_bibliot']) {
        Header ("Location: $redir?error_login=3");
	    exit;}

    // Paranoia: destruimos las variables login y password usadas
    unset($login);
    unset ($password);

    // En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
     //$idB = $usuario_datos['id_bibliot'];
     // le damos un mobre a la sesion.
    //session_name();
     // incia sessiones
    session_start();

    // Paranoia: decimos al navegador que no "cachee" esta página.
    session_cache_limiter('nocache,private');

    // Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    $_SESSION['id']=$usuario_datos['id_bibliot'];

    // definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['puesto']=$usuario_datos['puesto'];

    //definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['usuario_login']=$usuario_datos['login_bibliot'];

    //definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    $_SESSION['usuario_password']=$usuario_datos['password_bibliot'];
    
    //guardamos en una variable el nombre completo del bibliotecario
//    $_SESSION['nB']=$usuario_datos['nom_bibliot']." ".$usuario_datos['ap_bibliot']." ".$usuario_datos['am_bibliot'];
    $_SESSION['nB']=$usuario_datos['b'];

    // Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    $pag=$_SERVER['PHP_SELF'];
    Header ("Location: $pag?");
    exit;

   } else {
      // si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      Header ("Location: $redir?error_login=2");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
//session_name(); 
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
en las demas paginas (de hecho en casi todas) tambièn incluyo el filter.inc.php para validar las sesiones y las utilizo de la siguiente forma, como ejemplo:

Código:
<?php
   if ($_SESSION['puesto'] == 1) {
    echo "Administrador";
}else {
   echo "Bibliotecario";
}
?>
bien y para salir de la sesión simplemente en todas las paginas tengo un vinculo como este:

Código:
<td><a href="http://localhost/sapb/logout.php">Cerrar Sesión</a></td>
y el código del archivo logout.php es el siguiente (Basado en el logout de CLUSTER):

Código:
    <?php
session_start();
// destruimos la session de usuarios.
session_destroy();

header("Location: http://localhost/sapb/");
?>
<html>
<head>
<title></title></head>
<body>
</body>
</html>
ahora los comentarios:

2. estos son los archivos que estoy usando y ayer (especificamente en la noche los modifique, y quedaron como estan aqui).

la estructura de la web es asì

sapb/ => el sitio web.
sapb/index.php
sapb/logout.php
sapb/principal.php
sapb/altas/ => subcarpetas del web
sapb/altas/a_Librarian => modulo de altas de bibliotecario.

de algo que me di cuenta es que cuando mandaba a cerrar la sesion desde otra pagina que no fuese la principal.php como por ejemplo: localhost/sapb/altas/a_Librarian.php, no borraba la sesion, lo digo por que me iba a la carpeta sessions y verificaba. por lo tanto decidi hacerlo directamente y en lugar de direccionar en el vinculo de cerrar sesiòn hacia logout.php, lo hacia directamente a index.php con este còdigo al principio de index:
codigo del vinculo para cerrar sesion:
Código:
  <td><a href="http://localhost/sapb/index.php?logout=true">Cerrar Sesión</a></td>
codigo al principio del index.php:
Código:
  <?php
   if ($_GET[logout] == "true") {
   //aqui inicio la sesion o la recupero si ya hay otra
   session_start();
   //aqui la elimino
   session_destroy();
}
?>
ahora no se si desde cualquier pagina (me refiero a la profundidad de las carpetas) se puede cerrar sesion???

otra cosa que sucedio es que cuando termine de modificar estos archivos, me quede en la maquina, pero ya habia iniciado sesion e incluso vi el archivo sess_edf15454..... en la carpeta sessions, el tiempo que tarde en no hacer nada en la maquina fue de aproximadamente 3 horas, luego intente cerrar sesiòn pero el archivo no se borro ¿¿¿????.

bien, espero me haya hecho entender y pueda contar con su ayuda, de ante mano gracias.
  #5 (permalink)  
Antiguo 23/09/2005, 12:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Los archivos de sesión no se borran en tu servidor tan pronto matas tu sesión (con unset($_SESSION) y/o session_destroy().

El tiempo de expiración de una sesión lo determina la directiva:
session.gc_maxlifetime

Y cuando ese tiempo se supera .. la sesión queda deshabilitada .. pero el archivo va a seguir ahí hasta que se inicie el proceso de "garbage" (recolección de basura) que lo determina en porcentaje la directiva:

session.gc_probability

Ese será el porcentaje de veces que se hace un "session_start()" .. teóricamente a ese porcentaje todos los archivos de sesión que estén marcados como "garbage" se eliminaran .. (tambien hay un tema de donde está el directorio donde almacenas tus sesiones y S.O. del servidor al parecer .. ).

Revisa la documentación oficial de PHP para ve como funcionana las sesiones a ese nivel:

http://www.php.net/session

Un saludo,
  #6 (permalink)  
Antiguo 24/09/2005, 13:59
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
gracias cluster;

creo que por fin he podido entenderle a las sesiones ,
, despues de batallar y con lo que me acabas de decir.

entonces lo que tendre que hacer es quitar la barra de herramientas que tiene el explorer para que no se pueda regresar (mediante el boton), por que aunque no se haya borrado la sesion y se reconozca como "basura", aun así regresa a las paginas que habia estado como si se tratase de una sesion normal (que no se considera basura).

entonces, como le puedo hacer para que mande la ventana completa sin ninguna barra, simulando una aplicación??.

gracias de nuevo, hasta pronto.
  #7 (permalink)  
Antiguo 25/09/2005, 20:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
entonces, como le puedo hacer para que mande la ventana completa sin ninguna barra, simulando una aplicación??.
Eso lo resuelves con javascript .. abriendo una ventana al inicio de tu aplicación (window.open...) y trabajando todo en esa ventana (maximizada) abierta).

Pero, .. la solución no es esa .. eso no soluciona el problema de seguridad.

Lo que debes es ajustar esos tiempos de duración de tus sesiones (que por defecto session.gc_maxlifetime son 1440 segundos = 24 minutos) y ver como propagas el SID (en cookies o URL?) para ver que otros tiempos ajustar.

Un saludo,
  #8 (permalink)  
Antiguo 26/09/2005, 15:14
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
gracias por contestar CLUSTER;

no uso cokies, por que no uso ninguna funciòn para declarar cokies, creo que propago los SID de forma implicita, por que no las propago por la URL, osea que no hago esto:

Código:
     <a href="http://localhost/otrapagina.php?SID=01254hf45gth48rt">
ahora, como lo mencione anteriomente, he notado que cada vez que entro al sistema como usuario autenticado, se crea un archivo en la carpeta C:\php\sessions, con el nombre sessid_et4551354315458 (como ejemplo), y despues cuando cierro la sesiòn, ese archivo se borra.
me imagino que esto es algo normal (segun yo).

agradeceria que me apoyaras con esto, gracias de antemano y saludos
  #9 (permalink)  
Antiguo 26/09/2005, 15:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
ahora, como lo mencione anteriomente, he notado que cada vez que entro al sistema como usuario autenticado, se crea un archivo en la carpeta C:\php\sessions, con el nombre sessid_et4551354315458 (como ejemplo), y despues cuando cierro la sesiòn, ese archivo se borra.
me imagino que esto es algo normal (segun yo).
Si, eso es normal .. es la sesión (el archivo que se crea en el serivodor).

El tema de la propagación del SID lo define la configuración que uses de PHP (php.ini) directivas:

session.use_cookies
session.use_only_cookies

Si están a ON ambas .. propagaras el SID por cookies ("si saberlo" .. es PHP quien declara esa cookie)

Si usas session.use_trans_sid a ON .. tu SID se propagará en el URL .. por qué será PHP el que sobre-escriba ciertos tag´s HTML como por ejemplo uno de link (<a ...>) para incrustrar en el mismo el SID.

PD: si propagases el SID a mano .. lo harías así:
Código PHP:
<a href="http://localhost/otrapagina.php?<? echo SID ?>">
SID es la constante que te devuelve el "nombre de la sesión = ID de sesión". (lo mismo que usar session_name()."=".session_id() por ejemplo ..)

Un saludo,
Un saludo,
  #10 (permalink)  
Antiguo 27/09/2005, 01:21
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
Cita:
Iniciado por Gerifaltus
gracias cluster;

creo que por fin he podido entenderle a las sesiones ,
, despues de batallar y con lo que me acabas de decir.

entonces lo que tendre que hacer es quitar la barra de herramientas que tiene el explorer para que no se pueda regresar (mediante el boton), por que aunque no se haya borrado la sesion y se reconozca como "basura", aun así regresa a las paginas que habia estado como si se tratase de una sesion normal (que no se considera basura).

entonces, como le puedo hacer para que mande la ventana completa sin ninguna barra, simulando una aplicación??.

gracias de nuevo, hasta pronto.

me han comentado que esto puede ser una posible solucion para evitar la accion del navegador, de pulsar hacia atras:
"Lo más sencillo que se me ocurre es que cuando llegues a la página de destino pongas una variable de sesion $_SESSION["volver"] a false. Cuando den al botón de atrás en el navegador compruebas en esa página esa variable y si es false le das el error o lo desconectas. Si el servidor o el cliente te han cacheado la página no te va a servir, por eso, los php que estén bajo "protección" (páginas con usuario y contraseña o consultas a base de datos donde los datos varien frecuentemente) debes evitar cachearlos."

ahora la duda es.. como evitar cachearlos?



por cierto a mi no me guardaba nada en: php\sessions es mas no estaba creado.. quizas de igual, pero ya lo he arreglado en el php.ini
tenia esto:

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
session.save_path = "${path}\tmp\"

la he comentado y añadido esto, como dice que los usuarios windows tendrán que cambiarlo...
session.save_path = "C:\Archivos de programa\EasyPHP1-8\php\sessions"
edito: torpe de mi.. estaba bien.... pero no veia la carpeta tmp, que si tenia las variables de sesion :p

Última edición por cyborg; 05/10/2005 a las 12:21
  #11 (permalink)  
Antiguo 28/09/2005, 16:33
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
gracias cluster y cyborg por contestar,

como mencione en otro post, he estado leyendo el manual de php y el php.ini para averiguar mas acerca de las sesiones y me tope con estas directivas:

Código:
session.use_cookies = 1
¿esto me indica que usa cookies?, si se las desactivo, aùn asì me estara almacenando esos archivos (los de sesion) en el php\sessions???

Código:
session.gc_probability = 1
esto me indica el porcentaje de probabilidad en que php recogera los archivos de sesion que son basura, entonces si coloco un numero mayor, ¿me podria borrar alguna sesion que se esta ocupando en ese momento, o se espera a que el usuario (x) deje de maniobrar el sistema aunque la sesion siga estando activa?
¿si cierra sesion y el archivo de sesion no se borra, entonces en ese momento se considera basura (el archivo de sesion)?, ¿esa directiva la borrarà automaticamente?

Código:
session.gc_maxlifetime = 1440
esta directiva le da un tiempo de vida a la sesion, ¿cual es la diferencia entre esta directiva y la directiva session.gc_probability=x?

Código:
session.use_trans_sid = 1
esto que indica???

Código:
session.cache_expire = 180
¿este es el tiempo que dura la sesion en el chache del navegador?

por ultimo (soy muy pregunton, verdad , si ya me lo habian dicho), cual puede ser una configuración optima o mejor para las sesiones, es decir que se le puede cambiar en el php.ini para que no tenga todos los incovenientes anteriores. gracias compañeros de antemano.
  #12 (permalink)  
Antiguo 29/09/2005, 00:04
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
pues yo siento no poder ayudarte.. pq igual se menos que tu.. asi que quedo a la espera tambien

para evitar que una pagina se cachee tiene que ir en la cabecera de ella no?
  #13 (permalink)  
Antiguo 29/09/2005, 06:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
session.cache_expire = 180
¿este es el tiempo que dura la sesion en el chache del navegador?
No, .. no es la "sesión" en el caché .. sino las páginas que usan sesiones (que iniciaron el uso de sesiones por session_start())

Esto va en conjunto con el tipo de "cacheado" que deseas usar:
Cita:
session.cache_limiter string
session.cache_limiter specifies cache control method to use for session pages (none/nocache/private/private_no_expire/public). Defaults to nocache. See also session_cache_limiter().
Tambien tienes la función .. para ajustar dicho valor en tus scripts y así forzar tu própia configuración (independiente a la que PHP pueda usar):
session_cache_limiter()

Un saludo,


Un saludo,
  #14 (permalink)  
Antiguo 29/09/2005, 13:52
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
gracias cluster por contestar, y no te preocupes cyborg, estamos en las mismas. (Roma no se hizo en un día).

ok, ahora entiendo. anoche estuve fregando con mi maquina y me atrevi a cambiar algunos valores en el php.ini y quedaron como estan aqui:

Código:
session.use_cookies = 1
//esta la puse en cero y nomas no me reconocio las sesiones, no me dejaba entrar al sistema, y lo cambie a 1, y ya pude entrar.
Código:
session.gc_probability = 1
session.gc_divisor     = 10
//esta estaba en 1000, la cambie a 10 y despues me di cuenta que antes de iniciar sesion habia unos archivos de sesion (eran "basura") en la carpeta php\sessions, despues me puse a modificar algunas cosillas al sistema (habiendo iniciado sesion), despues volvi a revisar la carpeta y solo estaba el archivo de sesion que habia iniciado en ese momento, entonces conclui que sí se borran los otros que se consideran basura.
Código:
tambien esta 
session.gc_maxlifetime = 60
//como me mencionaste es el tiempo de vida de un archivo de sesion, estaba en 1440
Código:
session.cache_expire = 1
//esta tambien la cambie, estaba en 180
ahora, mi pregunta, esta bien esta configuraciòn o le cambio algo.

ya me voy por que me estan corriendo, hasta pronto y saludos.
  #15 (permalink)  
Antiguo 29/09/2005, 14:40
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
pero con lo que yo puse de marcar algo asi como $_SESSION["volver"] a false. en la pagina que te interese... controlar esa variable a true en las demas.... y en la pagina adecuada evitar que se cachee.... se forzará a volver a pedir la pagina.. y con eso en teoria podrias evitar lo de volver hacia atras..... aunque ahora no se si estamos hablando de eso :p
  #16 (permalink)  
Antiguo 29/09/2005, 15:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Gerifaltus

session.cache_expire va en conjunto con session_cache_limiter (en mi último mensaje hice el comentario). Para que lo revises.

session.gc_probability = 1
session.gc_divisor = 10

Ten cuidado con esas combinaciones .. si bien en tus pruebas te va a funciona todo de maravilla .. si eso lo usases en un servidor en "produccción" con cientos de inicios de sesión .. podrías tener problemas.

No sé si conoces que hace "g_divisor" y "gc_probability" .. pero debes conocerlo .. A veces no se trata sólo de "experimentos" .. por qué justamente una de esas directivas fija un factor ("porcentaje" .. lo norma = 100) de veces que se ejecuta "session_start()" (gc_proba...). Eso es lo que -ahora- en tus esperimentos has sacado unas conclusiones .. pero no es tan así la prueba en ese caso particular.

Un saludo,
  #17 (permalink)  
Antiguo 02/10/2005, 16:10
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
Cita:
Iniciado por Cluster
Gerifaltus

Ten cuidado con esas combinaciones .. si bien en tus pruebas te va a funciona todo de maravilla .. si eso lo usases en un servidor en "produccción" con cientos de inicios de sesión .. podrías tener problemas.
Un saludo,

Gracias Cluster, por contestar, de hecho estaba pensando (dese el principio) en comentar que es lo que hace el minisistema que estoy haciendo(parchando ) y de paso alguna sugerencia que me puedas aportar (con respecto a las sesiones), bueno pues bien ahi va:

Es un sistema de prestamo bibliotecario:
-altas de libros y usuarios (profesores y alumnos)
-altas de bibliotecarios y 1 administrador.
-consultas en maquinas cliente para saber si esta disponible algun libro X
-consultas varias y reportes (que todavia no estan listos)

bien, al parecer solo habran dos bibliotecarios, uno en cada turno (mañana y tarde), y un administrador. por tanto la maquina estara encedida desde temprano y luego tienen que cambiar sesion para que la pueda ocupar el bibliotecario de la tarde. los individuos que hagan consultas para ver lo libros disponibles entraran sin logearse (libre acceso), solo podran consultar y eso estará en otra web. osea que una web es para administrar y otra solo para consultar, claro usando la misma base de datos.

espero que me haya hecho explicar, y por lo que veo creo que tienes razón con respecto a modificar esas directivas que mencionas pero cuando estan en ejecución (en este momento no recuerdo la funcion que hace eso) y no desde el php.ini

bueno muchas gracias por sus comentarios, queda comprobando una vez mas que echando a perder se aprende. bien seguire intentando y si surge alguna otra duda lo mencionare aqui.

saludos
  #18 (permalink)  
Antiguo 02/10/2005, 23:44
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
anda yo tambien estoy pensando hacer eso... vamos digo pensando pq ni me he puesto a hacer el diseño de la bbdd :(
en mi caso es para el proyecto
  #19 (permalink)  
Antiguo 06/10/2005, 02:34
 
Fecha de Ingreso: octubre-2005
Mensajes: 2
Antigüedad: 18 años, 6 meses
Puntos: 0
Hola a todos. Yo lo que estaba haciendo es un contador de visitas con una sesión. Mientras exista sesión no se debe incrementar el contador pero una vez que se expire debe incrementar, hasta ahí me funciona, el caso es que una vez que cierras el navegador se supone que debe acabar la sesión no? En el explorer me funciona, si cierro y abro la página como la sesión no existe pues me incrementa, pero en el Mozilla no lo hace, aunque cierre el navegador sigue guardándome la variable de sesión por algún lado y cuando vuelvo a abrir la página no me incrementa. Por qué en un navegador si que me elimina la sesión y en el otro no? Alguien sabe por qué¿? Gracias. Pego el código que he hecho por si sirve de ayuda. Es una extensión de Typo3:
Código PHP:
    function main($content,$conf)    {
        
$this->conf=$conf;
        
$this->pi_setPiVarDefaults();
        
$this->pi_loadLL();
         
session_start();

        
$GLOBALS["TSFE"]->set_no_cache(); //No guarda caché en Typo3

        
$sArchivo="fileadmin/templates/main/HarvestersTypo3/contador/contadorIP.dat"//archivo con el contador

                         // Comprobamos si existe el archivo del contador
                           
if (file_exists($sArchivo)) {
                           echo 
"existe el archivo";
                               
// En caso afirmativo lo abrimos para lectura y escritura
                               
$hArchivo=fopen($sArchivo,'r+');
                               
// y recuperamos su contenido
                               
$nVisitas=fgets($hArchivo,10);
                                if (!isset(
$_SESSION['cont'])) {
                                   echo 
"<br>Incrementando";
                                   
$nVisitas++; // incrementamos el contador
                                   
rewind($hArchivo); // llevamos el puntero de lectura al inicio
                                   
fwrite($hArchivo$nVisitas); // y escribimos el nuevo valor
                                   
$_SESSION['cont']="harvesters";
                                } else { echo 
"<br>no incremento pq existe sesión";}
                           } else {
                               
// lo creamos
                               
$hArchivo=fopen($sArchivo,'w+');
                               
$nVisitas=1// establecemos el valor inicial
                               
fwrite($hArchivo$nVisitas); // y lo escribimos
                           
}
                           
fclose ($hArchivo); // cerramos el archivo


                        //Meto en un array el número de visitas
                        
$longitud=strlen($nVisitas);
                        for (
$i=0;$i<$longitud;$i++)
                        {
                         
$n=substr($nVisitas,$i,1);
                         
$arr_visitas[]=$n;
                        }

                 
//Muestro el contador con imágenes
                  
for ($i=0;$i<$longitud;$i++)
                  {
                     
$content="$content<img alt='".$arr_visitas[$i]."' src='fileadmin/templates/main/HarvestersTypo3/contador/digital-blue/".$arr_visitas[$i].".gif'>";
                  }


        return 
$this->pi_wrapInBaseClass($content);



  #20 (permalink)  
Antiguo 06/10/2005, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
hasta ahí me funciona, el caso es que una vez que cierras el navegador se supone que debe acabar la sesión no?
No, ... aquí no se "supone" nada .. Es la configuración de PHP que en este mensaje se ha comentado ampliamente lo que influye que en tu caso particular se comporte así la expiración de una sesión o no .. Debes revisarlo, sobre todo debes saber tu como propagas el SID en tu aplicación y configuración de PHP (por si tomas algo "por defecto") y de ahí ver por ejemplo si propagas el SID en cookies si tus navegadores las aceptan .. (lee todos los mensajes de este tema .. se ha tratado aquí todo eso y no está de más leer la documentación oficial de PHP al respecto: www.php.net/session)

Un saludo,
  #21 (permalink)  
Antiguo 06/10/2005, 12:48
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
en teoria si haces un session_destroy
deberia borrarse ese archivo de sesion (o eso creo)
  #22 (permalink)  
Antiguo 06/10/2005, 13:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por cyborg
en teoria si haces un session_destroy
deberia borrarse ese archivo de sesion (o eso creo)
No, .. no es así .. (el hecho físico de que se borre el archivo de sesión creado en el servidor para almacenar tus variables de esa sesión).

Por mi parte hice el comentario en este mismo tema:
http://www.forosdelweb.com/showpost....87&postcount=5

Pero lo mejor es revisar la documentación oficial de PHP y leer como funcionan. No hay que tenerle miedo a la documentación oficial sólo preguntar lo que no se entienda (por qué a veces no es del todo clara como nos gustaría a todos).

Un saludo,
  #23 (permalink)  
Antiguo 06/10/2005, 15:26
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
ummm bueno he probado con una pagina que basicamente era un session_start y destroy (cuando se cumplia una condicion)
y al borrar el archivo de sesion y volver a cargar la pagina no repetia la sesion.. al menos 2 seguidas...
supongo que eso deberia bastar (o igual no :p )
  #24 (permalink)  
Antiguo 06/10/2005, 15:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No te entendí .. pero no se trata di ir borrando a mano los archivos de sesión .. de hecho en condiciones normales uno no sabe ni donde están o que existan (no vas a poder siempre "borrar" a mano esos archivos ni vía PHP .. vas a tener acceso a eso).

El comentario que te hacía es que el hecho de hacer "session_destroy()" no involucra un borrado físico automático de tu archivo de sesión creado en el servidor .. El archivo pasa al estado "garbage" (basura) y de ahí se borrará automáticamente según las otras directivas que mencioné en otro mensaje de este tema.

Un saludo,
  #25 (permalink)  
Antiguo 06/10/2005, 23:57
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
ah ya entiendo, bueno yo me referia a que en mi caso, quizas por la configuracion del php.ini
al hacer el destroy los archivos de sesion desaparecian (no que yo los borrará a mano) :p

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 04:16.