Foros del Web » Programando para Internet » PHP »

Problema con Sesiones.

Estas en el tema de Problema con Sesiones. en el foro de PHP en Foros del Web. Hola a todos tengo un inconveniente con las sesiones, en mi sitio web creo dos variables sesiones de las cuales una es la variable de ...
  #1 (permalink)  
Antiguo 30/03/2005, 08:07
Avatar de grovervas
Usuario no validado
 
Fecha de Ingreso: junio-2002
Ubicación: Perú
Mensajes: 306
Antigüedad: 21 años, 10 meses
Puntos: 0
Pregunta Problema con Sesiones.

Hola a todos tengo un inconveniente con las sesiones, en mi sitio web creo dos variables sesiones de las cuales una es la variable de codigo de usuario la cual utilizo en otra pagina, pero el problema esta en que para destruir la sesión el usuario debe hacer click en un boton que llama a una pagina en donde esta la función session_destroy().

Pero en el caso de que el usuario no haga click en ese boton y salga del sitio con tan solo cerrar el navegador la sesion queda activa, y cuando un segundo usuario llega a ingresar, ingresa su clave y codigo pero, cuando visualiza sus datos visualiza la del usuario anterior, pero si valida los datos para ingresar al sitio. Puse las siguientes opciones en el php.ini ya que me dijeron de que ahi esta la duracion de las sesiones.

session.use_cookies = 1

session.name = PHPSESSID

session.auto_start = 0

session.cookie_lifetime = 180

session.cache_limiter = nocache

session.cache_expire = 180

session.use_trans_sid = 0


Pero incluso ha pasado bastante tiempo e ingresa el usuario y sigue mostrando los datos del usuario anterior, esto recien se corrige cuando llamo a la función session_destroy(), como podria hacer para que la sesión se libere por parte del servidor.

Agradesco de antemano sus colaboración.

Última edición por grovervas; 30/03/2005 a las 08:09
  #2 (permalink)  
Antiguo 30/03/2005, 09:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estas usando cookies para propagar el SID .. (session.use_cookies = 1
)

El tiempo que defines de duración de esa cookie (que contiene tu SID que asocia los datos del servidor en la sesión que creastes):

session.cookie_lifetime = 180

Son 180 segundos .. Si quieres que tu aplicación se comporte como mencionas: que al cerrar la última ventana de tu aplicación/sitio .. se elimine la sesión .. define ese tiempo a 0.

(en realidad la sesión seguirá activa; lo define: session.gc_maxtimelife ) pero al eliminarse la cookie (de tipo "sesión" si es definida con tiempo de expiración 0) se pierde la relación entre ese "cliente" y el "servidor" a nivel del SID .. por ende si PHP no recibe (tus scripts que usan e inician las sesiones vía: session_Start()) un SID válido .. se iniciará una nueva sesión. La sesión antigüa se será pasada al proceso de "garbage" (basura, lista para eliminar) cuando supere ese tiempo que se define en: session.gc_maxtimelife) y será borrada físicamente del servidor (el archivo que se genera) cuando el n° de porcentajes de veces que se ejecuta "session_start()" se cumpla y que define: session.gc_probality (o algo así se escribe .. lo estoy escribiendo de memoria).

Más o menos así es como fucionan las sesiones .. Como veras la configuración es MUYYYYYYYYYY necesario saber como está (la que usas) y en que te va afectar en tu uso cotidiano de sesiones.

Un saludo,
  #3 (permalink)  
Antiguo 31/03/2005, 11:36
Avatar de grovervas
Usuario no validado
 
Fecha de Ingreso: junio-2002
Ubicación: Perú
Mensajes: 306
Antigüedad: 21 años, 10 meses
Puntos: 0
Pregunta

Cluster realice los cambios que me habias comentado en el PHP.ini pero sigue con la misma funcionalidad de antes, pues si yo entro con mi usuaio y cierro la ventana ingresa otro usuario sus datos y se valida y muestra la informacion de mi usuario.

te alcanzo el codigo ya que puede ser por ahi el problema.

flogin.php
Código PHP:
<html>
 <head>
  <link href="../lib/cmac.css" type=text/css rel=Stylesheet>
  <script language="JavaScript">
    function validar()
     {
         if(flogin.docu.value == "")
         {alert("Debe de ingresar el número de su documento, con el que aperturo su cuenta.");flogin.docu.focus();return;}
         if(flogin.clave.value == "")
         {alert("Debe de ingresar su clave.");flogin.clave.focus();return;}
         flogin.submit();
     }
     <?
     
if(isset($_GET["ven"]))
     {
         if(
intval($_GET["ven"]) == 1)
         {
?>
          open('csaldos.php','Saldos','width=720,height=590,scrolling=1');
         <?}
         elseif(
intval($_GET["ven"]) == 2)
         {
?>
          alert("La clave ingresada no es correcta.");
         <?}
         elseif(
intval($_GET["ven"]) == 3)
         {
?>
          alert("No existen los datos del cliente.");
         <?}
     }
     
?>
  </script>
 </head>
<body topmargin="0" leftmargin="0">
<table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
      <form name="flogin" method="POST" action="comprobar.php">
       <tr>
        <td valign="top"><img src="../img/esq_aai.gif"></td>
        <td valign="top" bgcolor="#FFB2B5" align="center"><br>
         <b>Consulta de Saldos</b>
        </td>
        <td valign="top"><img src="../img/esq_aad.gif"></td>
       </tr>
       <tr>
        <td valign="top" bgcolor="#FFB2B5">&nbsp;</td>
        <td valign="top" bgcolor="#FFB2B5" align="left">
         Número de documento:<br>
         <input type="text" name="docu" style="border-width:1;border-height:1;border-color:#000000; font-family:verdana arial; font-size=13px" size="20"><br>
         Clave:<br>
         <input type="password" style="border-width:1;border-height:1;border-color:#000000; font-family:verdana arial; font-size=13px" name="clave" size="20"><br><br>
         <center>
          <a href="#" onclick="javascript:validar()"><img src="../img/btn_consul_saldos.gif" border="0" alt="Consultar"></a>
          <a href="#" onclick="javascript:document.flogin.reset()"><img src="../img/btn_limpiar_sal.gif" border="0" alt="Limpiar formulario"></a>
         </center>
        </td>
        <td valign="top" bgcolor="#FFB2B5">&nbsp;</td>
       </tr>
       <tr>
        <td valign="top"><img src="../img/esq_ai.gif"></td>
        <td valign="top" bgcolor="#FFB2B5" align="center">&nbsp;</td>
        <td valign="top"><img src="../img/esq_ad.gif"></td>
     </tr>
 </form>
</table>
</body>
</html>
comprobar.php
Código PHP:
include("../lib/db_config.php");
 
$SQL "SELECT cCodcli,cClave,nCambio FROM clientes WHERE cNudoci = '".$_POST["docu"]."'";
 
$result=mysql_query($SQL,$link);
 
$pass md5($_POST["clave"]);
 if(
$result)
 {
     
$row mysql_fetch_object($result);
     if(
$row->cClave == $pass)
     {
         
session_start();
         
session_register("COD");
         
session_register("CAM");
         
$_SESSION["COD"] = $row->cCodcli;
         if(
$row->nCambio == '0')
         {
             
$_SESSION["CAM"] = "S";
         }
         else
         {
             
$_SESSION["CAM"] = "N";
         }
         
header("Location: flogin.php?ven=1");
     }
     else
     {
         
header("Location: flogin.php?ven=2");
     }
 }
 else
 {
     
header("Location: flogin.php?ven=3");
 } 
cuentas.php
Código PHP:
session_start();
include("../lib/db_config.php");
$cCodCli = $_SESSION["COD"];
$SQL = "SELECT u.cCodcli,u.cNomcli,COUNT(c.cCodcta) as suma "
."from clientes u inner join cuentas c on u.cCodcli = c.cCodcli "
."WHERE u.cCodcli = '".$cCodCli."' GROUP BY u.cCodcli";
$result = mysql_query($SQL);
$row = mysql_fetch_object($result);
?>
<html>
<head>
       <title>Cuentas</title>
       <link href="../lib/cmac.css" type=text/css rel=Stylesheet>
</head>
<body>
    <b><span class="texto_negro"><b>Datos del cliente:</b></span></b>
    <table width="50% border='0' bordercolor='#000000' cellspacing="0" cellpadding="1">
    <tr>
    <td valign='top' width='30%'align='right'>Código:</td>
    <td valign='top' width='70%'><?=$row->cCodcli;?></td>
    </tr>
    <tr>
    <td valign='top' width='30%' align='right'>Cliente:</td>
    <td valign='top' width='70%'><?=$row->cNomcli;?></td>
    </tr>
    <tr>
    <td valign='top' width='30%' class='LabelTD' align='right'>Cuentas:</td>
    <td valign='top' width='70%' class='DataTD'><?=$row->suma;?></td>
    </tr>
    </table><br>
    <b><span class="texto_negro"><b>Cuentas y saldos:</b>&nbsp;(Para visualizar los movimientos haga click en el número de cuenta)</span></b>
<?
 $SQL 
"SELECT cCodcta,nSaldis,nSalcnt,dFecape,dFecmov,cHortrx,cMoneda FROM cuentas "
 
."WHERE cCodcli = '".$cCodCli."' ORDER BY cCodcta";
 
$result mysql_query($SQL,$link);
?>
 <table border='1' bordercolor='#000000' cellspacing="0" cellpadding="0">
  <tr>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='15%' align='center'><b>Apertura</b></td>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='15%' align='center'><b>Cuenta</b></td>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='14%' align='center'><b>S.D.</b></td>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='14%' align='center'><b>S.C.</b></td>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='25%' align='center'><b>Ultimo movimiento</b></td>
   <td valign='top' style='background:#D6D3CE; border-left:1px; border-top:1px' width='20%' align='center'><b>Moneda</b></td>
  </tr>
<?
 $c 
1;
  while(
$row mysql_fetch_object($result))
 {
     if(
$c == 1)
     {
$fondo "#FFFFDE";$c++;}
     else
     {
$fondo "#FFDBDE";$c 1;}
     echo 
"<tr>";
     echo 
"<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' align='right'>".$row->dFecape."</td>";
     echo 
"<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' class='DataTD' align='right'>";
     
?>
     <a href="movimientos.php?cuenta=<?=$row->cCodcta;?>"><b><?=$row->cCodcta;?></b></a></td>
    <?
     
echo "<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' align='right'>".number_format($row->nSaldis,2)."</td>\n";
     echo 
"<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' align='right'>".number_format($row->nSalcnt,2)."</td>\n";
     echo 
"<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' align='right'>".$row->dFecmov." ".$row->cHortrx."</td>";
     echo 
"<td valign='top' style='background:".$fondo."; border-left:1px; border-top:1px' align='right'>".$row->cMoneda."</td>\n";
     echo 
"</tr>";
 }
?>
 </table><br>
 <span class="texto_negro">S.D.: Saldo Disponible.</span>
 <span class="texto_negro">S.C.: Saldo Contable.</span><br><br>
 <div align="right"><span class="texto_negro">Los datos mostrados no tienen ningún valor legal, solo son de carácter informativo.<br>CMAC MAYNAS S.A.</span></div>
</body>
</html>

espero tu apoyo. :adios:

Última edición por grovervas; 31/03/2005 a las 11:37
  #4 (permalink)  
Antiguo 31/03/2005, 12:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Sobre el tema de los cambios de tu configuración .. no sé si ratificastes que estén los cambios efectuados correctamente; me refiero a comprobarlo haciendo un phpinfo() y ver los nuevos valores.

Por lo demás .. en tu código veo algunas "incompatiblidades":
session_register("COD");
session_register("CAM");
$_SESSION["COD"] = $row->cCodcli;

Eso no es correcto . .usa sólo $_SESSION (los arrays supergloblales) .. el uso de estas (lo recomendable) no es compatible con session_register() .. o no se debería usar.

Despues de tus header("Location ...") usa un exit; .. Se vé que el flujo del código llevará al scritp al final de este por sus if() .. else .. pero no está de más usarlo (el exit) pues el objetivo de un "location" es cambiar la ejecución del script actual por otro (el que redireccionas).

Un saludo,
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 10:17.