Foros del Web » Programando para Internet » PHP »

SE pierde la Session

Estas en el tema de SE pierde la Session en el foro de PHP en Foros del Web. Hola: Mi pregunta es la siguiente: tengo un formulario con campos usuario y password; al enviarlos a la pagina login.php me checa los valores y ...
  #1 (permalink)  
Antiguo 19/07/2006, 14:28
Avatar de BreCkver  
Fecha de Ingreso: enero-2006
Ubicación: Mexico, D.F.
Mensajes: 96
Antigüedad: 18 años, 3 meses
Puntos: 0
Exclamación SE pierde la Session

Hola:

Mi pregunta es la siguiente: tengo un formulario con campos usuario y password; al enviarlos a la pagina login.php me checa los valores y me inicia una session, pero el problema esta que cuando paso a la pagina1.php donde voy a tener mi aplicacion segura, pues, ya no me deja entrar porque vuelve hacer una comprobacion de registrado = si y ya no me deja, pues ,se pierde la session

aqui esta el codigo:

index.php
Código PHP:
<html>
<head>
<title>Formulario de Prueba</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<style type="text/css">
<!--
.boton {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; color: #FFFFF0; background-color: #000099; border-color: #000000 ; border-top-width: 1pix; border-right-width: 1pix; border-bottom-width: 1pix; border-left-width: 1pix}
.label {  font-size: 10pt; color: #000099; background-color: #EFEFEF; font-family: Verdana, Arial, Helvetica, sans-serif; border: 1pix #000000 solid; border-color: #000000 solid; font-weight: normal}
-->
</style>
<?php
session_start
();
if(!isset(
$_SESSION['registro']))
    {
        
Formulario();
    }
else
  echo
"<html>\n<head>\n<script language=\"JavaScript\">\nalert('Ya has iniciado sesion');</script>\n</head>\n</html>";
?>
<body>
<h1 align="center">Iniciar Sesion</h1>
<?php
 
function formulario()
 {
?>
<form action="login.php" method="post">
  <table width="246" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bgcolor="#0000CC">
    <tr>
      <td>
           <?php 
             
if ($_GET["error"]=="si")
        {
?>
            <bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span>
        <?}else{?>
            <div align="center"><font color="#FFFFFF" face="Verdana"><strong>Formulario:Prueba</strong></font></div>
        <?}?>         
      </td>
   </tr>
  </table>
  <div align="center"></div>
  <table width="246" height="100" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#EFEFEF">
    <tr> 
      <td width="256"><p align="center"><font color="#000066" size="2" face="Verdana"><strong>Usuario&nbsp;&nbsp;&nbsp;</strong></font> 
          <input name="usuario" type="text" class="label" id="usuario" size="15" maxlength="15">
        </p>
        <p align="center"><font color="#000066" size="2" face="Verdana"><strong>Password</strong></font> 
          <input name="password" type="password" class="label" id="password2" size="15" maxlength="15">
        </p>
      </td>
    </tr>
  </table>
  <div align="center">
    <input name="enviar" type="submit" id="enviar" value="Enviar" class="boton">
    &nbsp; 
    <input name="borrar" type="reset" id="borrar" value="Borrar" class="boton">
  </div>
</form>
<?php
    
}
?> 
</body>
</html>
login.php
Código PHP:

<?php
if(empty($_POST["usuario"]) || empty($_POST["password"]))
    {
        
header("Location: index.php?error=si");
        exit();
    }
elseif(
$_POST["usuario"]== "user" && $_POST["password"] == "user")
    {
        
session_start();
        
$_SESSION['registro']="si";
        echo 
'Registrado:*';
        echo 
$_SESSION['registro'];
        echo 
"\nsesion ID= \n";
        echo 
session_id();
        echo 
"\nsesion name= \n";
        echo 
session_name();        
        echo 
" \n <a href='pagina1.php'>Pagina Segura </a>";
    }
else
        
header("Location: index.php?error=si");


?>
Pagina1.php: en esta pagina es cuando se pierde la session
Código PHP:
<?php
session_start
();
if(!isset(
$_SESSION['registro']))
    {
        
header("Location: index.php?error=si");
    }
else
  echo
"<html>\n<head>\n<script language=\"JavaScript\">\nalert('Pagina Segura');</script>\n</head>\n</html>";
  echo 
"<h1>Cualquier Aplicacion</h1>";
?>
bueno, gracias, espero haberme explicado ::
__________________

:-D No solo soy mexicano también soy del Politécnico :arriba:

  #2 (permalink)  
Antiguo 19/07/2006, 14:31
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
papi, te falta un session_start() en index.php, es deicr , ARRIBA DE TODO NE LA PRIMER LINEA
  #3 (permalink)  
Antiguo 19/07/2006, 14:32
 
Fecha de Ingreso: marzo-2004
Ubicación: Sureste
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
Yo tuve un problema similar en este post:

http://www.forosdelweb.com/f18/problema-autentificando-usuarios-base-datos-408209/

Espero que te sirva :)
  #4 (permalink)  
Antiguo 19/07/2006, 14:36
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 5 meses
Puntos: 4
en todos los casos coloca <? session_start();?> solo, antes ke todo antes de cualuier cosasea php o html. bueno supongo ke si estas trabajando con cookies tenes habilitadas a estas para no tener este problema trabaja con get

<?
ini_set("session.use_cookies","0");
ini_set("session.use_trans_sid","1");
?>

con este codigo desactivas las cokies y activas el envio por get, lo tenes ke poner en todos los scripts ke trabajen con sesion

te kedaria asi

Código PHP:
<? session_start();?>
<?
ini_set
("session.use_cookies","0");
ini_set("session.use_trans_sid","1");
?>
pon ese fragmento antes ke toodo
__________________
hola . . .
  #5 (permalink)  
Antiguo 19/07/2006, 15:11
Avatar de BreCkver  
Fecha de Ingreso: enero-2006
Ubicación: Mexico, D.F.
Mensajes: 96
Antigüedad: 18 años, 3 meses
Puntos: 0
Gracias:

ups, creo que me falto esas dos lineas:

ini_set("session.use_cookies","0");
ini_set("session.use_trans_sid","1");

De todos modos gracias a todos por ayudarme, pronto hare una aplicacion mas amplia; haber con que nuevo problema me encuentro.

gracias, nuevamente::
__________________

:-D No solo soy mexicano también soy del Politécnico :arriba:

  #6 (permalink)  
Antiguo 19/07/2006, 15:29
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 JAK^
en todos los casos coloca <? session_start();?> solo, antes ke todo antes de cualuier cosasea php o html. bueno supongo ke si estas trabajando con cookies tenes habilitadas a estas para no tener este problema trabaja con get

<?
ini_set("session.use_cookies","0");
ini_set("session.use_trans_sid","1");
?>

con este codigo desactivas las cokies y activas el envio por get, lo tenes ke poner en todos los scripts ke trabajen con sesion

te kedaria asi

Código PHP:
<? session_start();?>
<?
ini_set
("session.use_cookies","0");
ini_set("session.use_trans_sid","1");
?>
pon ese fragmento antes ke toodo
NO NO .. no propaguen el SID en el URL por favor .. No lo digo yo .. lo recomienda por seguridad PHP.net en este documento de lectura obligada:

Cita:
Sessions and security
External links: Session fixation

The session module cannot guarantee that the information you store in a session is only viewed by the user who created the session. You need to take additional measures to actively protect the integrity of the session, depending on the value associated with it.

Assess the importance of the data carried by your sessions and deploy additional protections -- this usually comes at a price, reduced convenience for the user. For example, if you want to protect users from simple social engineering tactics, you need to enable session.use_only_cookies. In that case, cookies must be enabled unconditionally on the user side, or sessions will not work.

There are several ways to leak an existing session id to third parties. A leaked session id enables the third party to access all resources which are associated with a specific id. First, URLs carrying session ids. If you link to an external site, the URL including the session id might be stored in the external site's referrer logs. Second, a more active attacker might listen to your network traffic. If it is not encrypted, session ids will flow in plain text over the network. The solution here is to implement SSL on your server and make it mandatory for users.
http://www.acros.si/papers/session_fixation.pdf

Fuerza la propagación del SID en cookies y asegurate de que ningún antivirus, navegador (configuración de nivel de seguridad) y otros dispositivos de ese estilo bloqueen las cookies que PHP va a emitir para propagar el SID:

Código PHP:
ini_set("session.use_cookies","1");
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0"); 

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 19/07/2006, 15:32
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 5 meses
Puntos: 4
upssss no sabiaa esto hay ke korregir unas de las faqs recomiendan el get... forzando de esa manera no hay forma ke las blokeen a las kookies???
__________________
hola . . .
  #8 (permalink)  
Antiguo 19/07/2006, 15:43
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 JAK^
upssss no sabiaa esto hay ke korregir unas de las faqs recomiendan el get... forzando de esa manera no hay forma ke las blokeen a las kookies???
A que FAQ haces referencia? ..

Si tu fuerzas la propagación del SID en cookies, si un usuario tuyo bloquea las cookies, no podrá usar tu sistema basado en sesiones .. ese es el "contra" vs a "seguridad".

Según el documento (PDF) que ves .. no es que las cookies sean "infalibles" .. pero son mucho más seguras que propagar por el URL el SID (lo hagas tu a mano o lo haga PHP automáticamente). De hecho como ese mismo documento menciona .. no hay que descuidar otro tipo de seguridad que en "mala" combianción con uso de sesiones podría afectar a estas. Me refiero a cuidarse del "cross-site scripting" entre otros. Puedes ver más información al respecto en:

http://phpsec.org/projects/guide/

El tema de bloquear arbitrariamente cookies que hace mucha gente por qué "le han dicho" que son "malas" .. no me parece correcto. Hay que "bloquear cookies" selectivamente .. si el sitio/servicio que usas te presta confianza: acepta sus cookies! .. Esto también pasa por información que uno debe dar a sus usuarios y sobre todo avisar que esto es por su bien.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 19/07/2006, 15:50
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 5 meses
Puntos: 4
en esta faq no se deja en evidencia de esto....

entonces kiza habria ke pensar tambien hacia ke tipo de usaurios va dirigida la pagina (si entienden algo del tema o nada de nada) y los riesgos...

puesto ke no es lo mismo un sitio ke registra usuarios para subir poemas y chistes ke el ke registra para realizr compras online el nivel de seguridad varia mucho.... no se si estare asertado en esto
__________________
hola . . .
  #10 (permalink)  
Antiguo 19/07/2006, 16:03
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 JAK^
en esta faq no se deja en evidencia de esto....

entonces kiza habria ke pensar tambien hacia ke tipo de usaurios va dirigida la pagina (si entienden algo del tema o nada de nada) y los riesgos...

puesto ke no es lo mismo un sitio ke registra usuarios para subir poemas y chistes ke el ke registra para realizr compras online el nivel de seguridad varia mucho.... no se si estare asertado en esto
mm La FAQ en extricto rigor no dice si es el mejor método propagar el SID en el URL o en Cookies (tal vez amerite otra FAQ para comentar el tema y hacer referencia a sus "pro´s y contras" ..) .. Sólo detalla como propagar el SID en el URL (pero si que está otra FAQ que explica al menos que hay -dos- formas de propagar el SID y tienes también la documentación oficial de PHP al respecto (que no sé por qué nadie se la lee!!!!!! si está ahí todo ..!!!).

La FAQ que hago mención:
http://www.forosdelweb.com/showpost....&postcount=129

Yo por mi parte propago el SID siempre en cookies, en mis aplicaciones exijo a mis usuarios que por lo menos habiliten las cookies al sitio de su interes.

El uso de sesiones normalmente se orienta a zonas de usuarios o que se han registrado en tu sitio .. por ende con más razón deberían aceptar estas "cookies" por su seguridad.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 19/07/2006, 17:27
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 5 meses
Puntos: 4
hola cluster no kiero kontradecir al maestro pero esta frase de la faq
Cita:

Para no tener que programar manualmente el PHPSESID en nuestros script y no preocuparnos por que el cliente no acepte las cookies de nuesta session deberemos tener en nuestro php.ini las siguientes directivas activadas (1) o descativadas (0)

da a entender komo ke traeria menos problemas trabajar asi.... va digo no se taria bueno abrir otra faq ke explike todo esto
__________________
hola . . .
  #12 (permalink)  
Antiguo 20/07/2006, 06:45
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 JAK^
hola cluster no kiero kontradecir al maestro pero esta frase de la faq


da a entender komo ke traeria menos problemas trabajar asi.... va digo no se taria bueno abrir otra faq ke explike todo esto
Por mi parte .. sin intentar darle otro sentido a lo que dice textualmente ..

En la propagación del SID por el URL como ahí dice no te tienes que preocupar si el cliente acepta o no cookies (pues no se propaga en cookies). Claro .. si vas a leer directamente esa FAQ, por supuesto que vas a creer que ese es el único y mejor método (a lo mejor "supones" que habría otro método relacionado con cookies .. pero ya sería mucho que te hagas esa pregunta, sólo te centrarías en la palabra mágica: "no tendras problemas" y por inercia .. así lo usaras y nunca más lo más probable hasta que realmente tengas algún problema con sesiones).

La FAQ que explica que existen dos métodos de propagación del SID está (dejé el link) .. tampoco esta dice claramente los pro´s y contras .. Pero insisto una vez más: entiendo que una "FAQ" suele sintetizar algunas temáticas concretas .. pero es que todo esto esto está detallado en la documentación oficial de PHP .. (no digo esto por qué no quiera crear una FAQ . .de hecho las FAQ's son públicas y abiertas .. si quieres estás invitado a crear una si lo estimas oportuno .. aunque "FAQ's" así .. sueltas si no las lees todas (pese que algunas referencian a otras para completar el tema) no sirven tampoco de mucho ...)

Digo yo: ¿por qué tanto miedo a leer la documentación oficial?. Es cierto que la documentación oficial de sesiones de php.net en "castellano" está bastante más incompleta que lo que es su versión en ingles (de hecho el documento "PDF" sólo aparece ese link en la versión en ingles).

Como comentario personal .. yo como "autodidacta" tambíen esperaba ver ejemplos sobre sesiones y solucionar problemas en "google" cuando tenía problemas .. (no le tomaba el peso correspondiente a la documentación oficial) .. cuando por fín me dió por leerla y entenderla .. ahí ya ví el por qué de algunas cosas como los "mitos" sobre sesiones cuando se habla de que si las sesiones tienen de vida lo que el navegador tarde en cerrar la última página del sitio .. (no es completamente cierto .. depende directamente de como uno propague el SID y otros factores ..) .. y cosas por el estilo se me aclararon.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 20/07/2006 a las 07:19
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 17:35.