Foros del Web » Programando para Internet » PHP »

Logica en Sesiones de usuario

Estas en el tema de Logica en Sesiones de usuario en el foro de PHP en Foros del Web. Hola de nuevo y de antemano gracias por contestar nuestras dudas. YO tengo una logica para las sesiones de usuario en mi sitio y quisiera ...
  #1 (permalink)  
Antiguo 23/05/2011, 20:44
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 13 años, 6 meses
Puntos: 3
Pregunta Logica en Sesiones de usuario

Hola de nuevo y de antemano gracias por contestar nuestras dudas.

YO tengo una logica para las sesiones de usuario en mi sitio y quisiera que me ayudaran a aclarar ciertos conceptos y de esa manera ajustar mi codigo.

tengo estos archivos:
* index.php (portada de la pagina web)
*iniciarsesion.php (formulario de login)
*claseusuario.php (clase que maneja los usuarios del sistema incluidas las sesiones)
* eventoiniciarsesion.php (pagina la cual se encarga de comunicar el formulario de login con el index sesion)

El proceso de logueo es asi:

* entro al formulario de login. lleno los datos y doy click a iniciar sesion.

*el formulario en su atributo action llama a eventoiniciarsesion.php y le manda los datos por POST.

*eventoiniciarsesion.php recoge los datos usuario y contraseña y llama al método
validariniciodesesion() de la clase usuario en claseusuario.php

*si valida correcto entonces llama al metodo iniciarsesion() y crea una sesion con la funcion session_start().

* cuando se inicia la sesion el navegador dirige a la pagina indexsesion y en la url viaja el alias del usuario.

* indexsesion.php captura esa variable alias y hace una consulta y revela en una tabla ubicada a la derecha del sitio, los datos del usuario que acaba de iniciar sesion.

El problema es que si se da clic hacia otro enlace la sesion se pierde, se pierde el alias en la url y por ende los datos revelados anteriormente.

me documente y lei que debia poner en todas mis paginas la funcion session_start() pero me aparece un error:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ...

se que una variable enviada por get no se va a conservar en todo mi sitio, pero entonces hay una manera de poder identificar a mi usuario en todo mi sitio solo con las variables de sesion?

que es eso de registrar variables para usarlas en cada pagina con session_register() ?

METODOS DE LA CLASE USUARIO QUE VALIDAN E INICIAN LA SESION:

Código PHP:
public function ValidarSesion($user,$pass,$conn){
                
                
$sqlconsultausuario =  "select alias,contrasena,idestado from tbcuenta where alias = '".$user."'";
                
$consulta mysql_query($sqlconsultausuario,$conn);
                
$registros mysql_num_rows($consulta);
                
$fila mysql_fetch_row($consulta);
                
$alias "";
                
                if (
$registros <= 0)
                {
                        
                    echo 
"<script>alert ('La información del alias ingresado no es correcta.')</script>";
                    
$alias "ninguno";
                    return 
$alias;
                }
                
                else
                {
                    if(
$fila['1'] != $pass){
                        
                        echo 
"<script>alert ('La información de la contraseña ingresada no es correcta.')</script>";
                        
$alias "ninguno";
                        return 
$alias;        
                    }
                    
                    else{
                        
                            if(
$fila['2'] != 1)
                            {
                                echo 
"<script>alert ('Su cuenta no ha sido activada. Para mayor información contacte al administrador.')</script>";
                                
$alias "ninguno";
                                return 
$alias;    
                                        
                            }
                            else{
                                 
$alias $fila['0'];
                            
                                 return 
$alias;
                            }
                    }
                    
                }
                
                
                
                
            }
            
            
            public function 
IniciarSesion($alias,$conn){
                
                if (
$alias == 'ninguno'){
                
                    echo 
"la sesion no se pudo crear";     
                }
                
                else{
                 
session_start();
                
                  
$_SESSION['usuario'] = $alias;
                   
$sqlconsulta=  "select alias from tbcuenta where alias = '".$alias."'";
                  
$consulta =mysql_query($sqlconsulta,$conn);
                  
$datosmysql_fetch_row($consulta);
                  
                  echo 
"<script>document.location.href = 'indexsesion.php?alias=$datos[0]';</script>";
    
                }
                            
            } 
LLAMADO DE LOS METODOS Y CAPTURA DE LOS DATOS POR POST PARA INICIAR LA SESION EVENTOINICIARSESION.PHP:

Código PHP:
$alias $_POST['alias'];
$contrasena $_POST['contrasena'];


include (
'conexion.php');
include (
'claseusuario.php');
$us = new usuario();
$conectar = new conectarse();
$conn $conectar->get_conexion();
$cerrar $conectar->close_conexion();

$nick $us->ValidarSesion($alias,$contrasena,$conn);

$us->IniciarSesion($nick,$conn);

$cerrar

VIAJE DE LA VARIABLE ALIAS EN EL URL PARA REVELAR LOS DATOS INDEXSESION.PHP:

Código PHP:
    $alias $_GET['alias'];
                                                    
                                                    include (
'conexionb.php');
                                                    
$conectar = new conectar();
                                                    
$conn $conectar->get_conexion();
                                                    
$cerrar $conectar->close_conexion();
                                                    
                                                     
$sqlconsulta=  "select a.nombre,b.nombre from tbcuenta a inner join tbperfil b where a.idperfil = b.idperfil and a.alias = '".$alias."' group by a.alias";
                                                      
$consulta =mysql_query($sqlconsulta,$conn);
                                                      
$datosmysql_fetch_row($consulta);
                                                    
                                                     echo 
"<table bordercolor=#330066 border=0>
                                                    <tr align=center>
                                                        <td align=center><font face=Arial, Helvetica, sans-serif size=+1 color=#CC0000>
                                                        <b>¡Bienvenido!</font></td>
                                                    </tr>
                                                    <tr>
                                                           <td>
                                                           <img src = Imagenes/linearoja.gif width = 200 height = 3>
                                                        </td>
                                                    </tr>
                                                    
                                                     <tr align=center>
                                                           <td>
                                                               <table border=0 bordercolor=#999900>
                                                                <tr>
                                                                    <td align=center>
                                                                    <font face=Arial, Helvetica, sans-serif size=2 color=#CC0000>
                                                                    <b>Usuario:
                                                                    </font>
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td align=center>
                                                                    <font face=Arial, Helvetica, sans-serif size=2 ><b>"
.$datos['0']."
                                                                   
                                                                    </font>                                                                    
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td align=center>
                                                                    <br>
                                                                    <font face=Arial, Helvetica, sans-serif size=2 color=#CC0000>
                                                                    <b>Perfil:
                                                                    </font>
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td align=center><font face=Arial, Helvetica, sans-serif size=2 ><b>"
.$datos['1']."
                                                                    </font>
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td>
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td>
                                                                    </td>
                                                                </tr>
                                                                
                                                                <tr>
                                                                    <td>
                                                                    </td>
                                                                </tr>
                                                            
                                                            </table>
                                                        </td>
                                                    </tr>
                                                   
                                                </table>
                                                
                                            "
;
                                                
                                                
$cerrar

LES AGRADEZCO ORIENTACION DEL TEMA, AUNQUE EN EL FONDO CREO QUE ME ESTOY COMPLICANDO.
  #2 (permalink)  
Antiguo 24/05/2011, 02:36
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: Logica en Sesiones de usuario

Este problema es más de los mismo que un post anterior.
Arriba de TODO TU SCRIPT, arriba del primer texto html o php o lo que tengas, antes de cualquier salida html.
Copia y pega esto:

<?php

ob_start();

?>
  #3 (permalink)  
Antiguo 24/05/2011, 06:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Logica en Sesiones de usuario

Lo correcto seria NO imprimir nada antes de usar session_start()
  #4 (permalink)  
Antiguo 24/05/2011, 09:15
Avatar de zibor  
Fecha de Ingreso: diciembre-2006
Mensajes: 80
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: Logica en Sesiones de usuario

Buenas. Debes poner en todas las paginas que necesites la session, al principio de dichos archivos justo la primera linea y despues de un avertura de <?php session_start();

No se exactamente que quieres conseguir pasandole el alias por url, pero puedes utilizar las variables de sesion para pasar los datos del usuario logueado, y no tienes que mostrar nada al usuario por url... Por lo que cuando se loguee, al verificar si existe el usuario para darle session, al verificarse, puedes recoger sus datos y guardarlos por variables de session, y siempre estaran ahi hasta que se cierre....
__________________
Picando código...!!!
  #5 (permalink)  
Antiguo 24/05/2011, 12:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Logica en Sesiones de usuario

Cita:
Iniciado por Ronruby Ver Mensaje
Lo correcto seria NO imprimir nada antes de usar session_start()
Cuando te referis a no imprimir nada es que? sacar codigo html?
  #6 (permalink)  
Antiguo 24/05/2011, 12:42
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Logica en Sesiones de usuario

sip HTML-PHP-JAVASCRIPT o lo que sea, hasta un espacio puede hacer que se te genere ese error, debes colocar session_start(); en la linea numero 1 de las paginas.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 24/05/2011, 17:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Logica en Sesiones de usuario

Cita:
Iniciado por jotaincubus Ver Mensaje
sip HTML-PHP-JAVASCRIPT o lo que sea, hasta un espacio puede hacer que se te genere ese error, debes colocar session_start(); en la linea numero 1 de las paginas.


haber si entendi lo de los espacios porque yo le quite todo los espacios a mi html y sigue saliendo el error.

este es mi html con el codigo php al inicio:

Código HTML:
<?php session_start(); ?>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>
<script language="javascript">
//Su explorador nosoportajavaolotienedeshabilitado;estapaginanecesitajavascriptparafuncionarcorrectamente !-->
function pop(pagina,ventana,parametros){
window.open(pagina,ventana,parametros);
}
function abrir(direccion,pantallacompleta,herramientas,direcciones,estado,barramenu,barrascroll,cambiatamano,ancho,alto,izquierda,arriba,sustituir)
{
var opciones="fullscreen="+pantallacompleta+
",toolbar="+herramientas+
",location="+direcciones+
",status="+estado+
",menubar="+barramenu+
",scrollbars="+barrascroll+
",resizable="+cambiatamano+
",width="+ancho+
",height="+alto+
",left="+izquierda+
",top="+arriba;
var ventana=window.open(direccion,"venta",opciones,sustituir);
}
function abrircrearcuenta(){
document.location.href='crearusuario.php';
}
//--></script>
<meta http-equiv="Content-Type"
content="text/html;charset=iso-8859-1">
<meta name="description"
content="Instituci&oacute;ndeeducaci&oacute;nsuperior.Unadelasm&aacute;sreconocidasdeColombiayLatinoam&eacute;rica.">
<meta name="keywords"
content="univalle,carreras,ciencia,tecnolog&iacute;a,cultura,academia,pregrados,diplomados">
<meta name="Identifier-URL"content="">
<meta content="es"name="content-language">
<meta http-equiv="pragma"content="no-cache">
<meta http-equiv="Cache-Control"content="no-cache">
<title>UniversidaddelValle,SedeYumbo-Colombia</title>
<style type="text/css"media="screen">@import"hoja.css";</style>
<link href="../css/hoja.css"rel="stylesheet"type="text/css">
</head>
<body>
<form name="forminiciosesion"action="eventoiniciarsesion.php"method="POST">
<!--tablacajonrojo-->
<table border="0"width="100%">
<!--inicioiniciarsesion-->
<tr>
<td style="border-width:1px;">
<table border="0" bordercolor= "pink" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr bgcolor="#cc0000">
<td colspan="2" height="18" nowrap><font color="#ffffff"face="Arial,Helvetica,sans-serif" size="1"><strong></strong></font>
<div align="left"><font color="#ffffff" face="Arial,Helvetica,sans-serif" size="2"><strong>INICIAR SESION
</strong></font></div>
</td>
</tr>
<br>
<tr>
<td align="center">
<br>
<b>
<table border="0">
<tr>
<td>
<img src="http://www.forosdelweb.com/f18/metaforas/warning.png" width="30" height="30"/>
</td>
<td valign="middle">
<font face="Arial,Helvetica,sans-serif"size="2"color="#CC0000"><b>IMPORTANTE: </b></font><font face="Arial,Helvetica,sans-serif" size="2"<b>Inicie sesi&oacuten si ya dispone de una cuenta activada.</b></font>
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<!--panellogin-->
<tr>
<td align="center" style="border-width:0px;">
<br>
<br>
<table bgcolor="#F8E1E1" cellspacing="20" border="1" width="80%">
<tr>
<td style="border-width:0px;">
<table>
<tr>
<td align="center" colspan="3">
<font face="Arial,Helvetica,sans-serif" size="2"><b>Identif&iacutequese Aqu&iacute. Ingrese su alias y contraseña.</b></font>
<br>
<br>
</td>
</tr>
<tr>
<td rowspan="2"><img src="http://www.forosdelweb.com/f18/metaforas/llave.png" width="64" height="64"></td>
<td align="right"><font face="Arial,Helvetica,sans-serif" size="2"><b>Alias:</font></td>
<td><input type="text" name="alias" maxlength="30" size="30"></td>
</tr>
<tr>
<td align="right"><font face="Arial,Helvetica,sans-serif" size="2"><b>Contraseña:</font></td>
<td><input type="password" name="contrasena" maxlength="20" size="20"></td>
</tr>
<td colspan="3" align="center"><input type="submit" name="ingresar" value="IniciarSesión"></td>
<tr>
<td colspan="3" align="center"><a href=olvidoclave.php>¿Olvid&oacute su clave?</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!--paneliranuevacuenta-->
<tr>
<td align="center" style="border-width:0px;">
<br>
<table bgcolor="#F8E1E1" cellspacing="20" border="2" width="80%">
<tr>
<td align="center" style="border-width:0px;"><font face="Arial,Helvetica,sans-serif"size="2"><b>¿Eresnuevo? Reg&iacutestrate. </b></font>
</td>
</tr>
<tr>
<td align="center" style="border-width:0px;"><input type="button" name="crearcuenta" onclick="abrircrearcuenta()" value="CrearCuenta"></td>
</tr>
</table>
</td>
</tr>
</table>
</form>>
</body>
</html> 

como debe quedar entonces?

otra pregunta: como se registran las variables? session_register?
  #8 (permalink)  
Antiguo 25/05/2011, 04:03
Avatar de zibor  
Fecha de Ingreso: diciembre-2006
Mensajes: 80
Antigüedad: 17 años, 11 meses
Puntos: 1
Respuesta: Logica en Sesiones de usuario

Buenas, la linea de "session_start()" está bien colocada, desconozco un poco porque te da problemas. Yo lo he utilizado igual, cuando utilizo sessiones y no me ha dado problemas nunca.

Para guardar variables de session con php5, yo hago lo siguiente. Tras comprobar que el usuario que intenta acceder, existe en en sistema, recojo sus datos y en mi caso solo guardo su nick, su contraseña, y un nivel que le tengo establecido... de la siguiente manera:

Código PHP:
        //recojo los datos de una consulta SQL
       
$datos mysql_fetch_array($result);
        
        
//crear variables de session
        
$_SESSION["usuario"] = $datos["usuario"];
        
$_SESSION["clave"] = $datos["clave"];
        
$_SESSION["nivel"] = $datos["nivel"]; 
Con eso , mientras el usuario siga interactuando, exista dicha session, esos datos estarán disponible en todas las paginas que pueda acceder.

Saludos.
__________________
Picando código...!!!
  #9 (permalink)  
Antiguo 25/05/2011, 06:04
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 9 meses
Puntos: 58
Respuesta: Logica en Sesiones de usuario

Lo de session_start() lo debes de poner en todas las páginas, pero sólo una vez.

Si lo has puesto en la página eventoiniciarsesion.php lo tienes que quitar de la función IniciarSesion() porque si no lo estarías incluyendo dos veces. Esa función debería quedar así:

Código PHP:
public function IniciarSesion($alias,$conn){ 
                 
                if (
$alias == 'ninguno'){ 
                 
                   echo 
"la sesion no se pudo crear"
                   
session_destroy();
                } 
                 
                else{ 
                                  
                  
$_SESSION['usuario'] = $alias
                   
$sqlconsulta=  "select alias from tbcuenta where alias = '".$alias."'";
                   
$consulta =mysql_query($sqlconsulta,$conn); 
                  
$datosmysql_fetch_row($consulta); 
                   
                  echo 
"<script>document.location.href = 'indexsesion.php?alias=$datos[0]';</script>";
      
                } 
                             
            } 

Prueba así a ver si se te quita el error. De todas formas, la forma que tienes de mostrar las ventanas de alerta no sé si te va a dar problemas también. No sé si el error puede venir de ahí.
Prueba de todas formas lo que te he dicho a ver como te va y nos cuentas.
  #10 (permalink)  
Antiguo 08/03/2013, 15:21
 
Fecha de Ingreso: abril-2012
Ubicación: colombia
Mensajes: 62
Antigüedad: 12 años, 7 meses
Puntos: 0
Información Respuesta: Logica en Sesiones de usuario

buena tarde yo tengo un problema similar pues creo que session no esta haciendo nada yo tengo estos formularios.
Entrada.php // que es donde pide el usuario y contrasena
valido.php // que es donde me da la bienbenida al usuario y hay un boton para ingresar al area de menus el cual se llama asi
moduloadministrador.php // aqui ya me muestra todos los modulos que tiene la web

ahora en valido tengo este codigo

Código PHP:
Ver original
  1. <?
  2. // Configura los datos de tu cuenta
  3. include('config.php');
  4. // Conectar a la base de datos
  5. mysql_connect ($bdServerName, $bdServerUser, $bdServerPassword);
  6. mysql_select_db($bdName) or die('No se puede seleccionar la base de datos');
  7.  
  8. if ($_POST['cedula']) {
  9. //Comprobacion del envio del nombre de usuario y password
  10. $cedula=$_POST['cedula'];
  11. $contrasena=$_POST['contrasena'];
  12. $nombre=$_POST['nombre'];
  13. if ($contrasena==NULL) {
  14. echo "La password no fue enviada";
  15. }else{
  16. $query = mysql_query("SELECT cedula,nombre,contrasena FROM usuarios WHERE cedula = '$cedula'") or die(mysql_error());
  17. $data = mysql_fetch_array($query);
  18. if($data['contrasena'] != $contrasena) {
  19. echo "<script type='text/javascript'>window.location.href='usuarionovalido2.php'</script>";
  20. }else{
  21. $query = mysql_query("SELECT cedula,nombre,contrasena FROM usuarios WHERE cedula = '$cedula'") or die(mysql_error());
  22. $row = mysql_fetch_array($query);
  23. $_SESSION["s_cedula"] = $row['cedula'];
  24. $_SESSION["logeado"] = "SI";
  25.  
  26.             $cedula=$row["cedula"];
  27.             $contrasena=$row["contrasena"];
  28.             $nombre=$row["nombre"];
  29.            
  30. //echo ("Bienvenido <strong>".$_SESSION['s_nombre']." </strong> ya puedes acceder a la seccion de ".'<a href="moduloadministrador.php">Miembros</a>'."");
  31. }
  32. }
  33. }
  34. ?>

y dentro del mismo formulario valido.php esta el boton de entrar modulo administrador.php

Código PHP:
Ver original
  1. <form method="post" action="moduloadministrador.php">
  2.         <pre align="justify"><h3>::Seccion de Analisis Crimininal Sistema para Santander::</h3></pre>
  3.             <table width="95%" height="84"  border="0">
  4.               <!--DWLayoutTable-->
  5.               <tr>
  6.                 <td width="399"><p align="center" class="style4"><span class="style5"><font color="#FF0000" size="5">Bienvenido</font></span><br>
  7.                     <?php echo $nombre ?> </p>
  8.                   <p align="center" class="style4"><strong>Haga click en el icono para continuar</strong></p>
  9.             </td>
  10.               </tr>
  11.             </table>
  12.             <div align="center">
  13.               <pre align="justify"><input type="submit" name="Entrar" value="Entrar"></pre>
  14.             </div>
  15.             </form>

hasta aqui creo que bien pues me funciona, pero como hago para ponerle a las demas paginas web en php el session star() y que tambien pues se valide y tenga mas seguridad pues no lo he logrado, agradezco el aporte.
__________________
edwinarley
  #11 (permalink)  
Antiguo 08/03/2013, 15:34
 
Fecha de Ingreso: abril-2012
Ubicación: colombia
Mensajes: 62
Antigüedad: 12 años, 7 meses
Puntos: 0
Información Respuesta: Logica en Sesiones de usuario

bueno mire una cosa y ya creo que es asi dejo el codigo
Código PHP:
Ver original
  1. <?php
  2.  if($_SESSION["s_cedula"]==true) {
  3.  echo "OK, tienes el acceso permitido";
  4.  }
  5.  else {
  6.   echo "<script type='text/javascript'>window.location.href='usuarionovalido2.php'</script>";
  7. // echo "Error, no tienes permiso.";
  8.  
  9.  }
  10.  ?>

aohara como haria la destruccion de la session al salir?
__________________
edwinarley

Etiquetas: sesiones_en_php
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 13:04.