Foros del Web » Programando para Internet » PHP »

cuestion sobre session

Estas en el tema de cuestion sobre session en el foro de PHP en Foros del Web. Hola chicos, tengo una duda . Tengo el siguiente codigo en cada pagina de mi web donde el acceso es solo para autorizados Código PHP: ...
  #1 (permalink)  
Antiguo 29/01/2007, 06:44
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 7 meses
Puntos: 0
cuestion sobre session

Hola chicos, tengo una duda .
Tengo el siguiente codigo en cada pagina de mi web donde el acceso es solo para autorizados
Código PHP:
<?php
session_start
();

        
//recuperamos variable de session $name
        
$name=$_SESSION['name'];
        
$pass=$_SESSION['pass'];
//asignamos de nuevo 
        
$_SESSION['name']=$name;
        
$_SESSION['pass']=$pass;
        
//si no la hay 
        
if(!$name)
    {
//redirecionamos para autorizacion
        
$goURL="welcome.php?error=necesitas autorización";
         
header ("Location: ".$goURL); 
     }
     
?>
//aqui luego la web en si
<html><head><title></head><body>pagina web </body></html>

Resulta que este codigo funciona en 99% de casos.
O sea que durante un par de semanas de tests en algunos equipos de forma puntual y independiente no se les comprobaba ninguna variable sino se cargaba la pagina que sigue despues del codigo.
Ademas eso ha pasado en equipos remotos, que no han tenido acceso alguno a esta web.
En mi equipo no me ha pasado y de mis compañeros tampoco, pero he visto casos en equipos remotos.
No entiendo donde esta el error que deja que ocurre esto.
Gracias a todos.+
  #2 (permalink)  
Antiguo 29/01/2007, 06:52
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Re: cuestion sobre session

hola vick
no necesitas volver a transformarlos no se porqe lo haces
Código PHP:
<?php
session_start
();

        
//recuperamos variable de session $name
        
$name=$_SESSION['name'];
        
$pass=$_SESSION['pass'];

        if(!
$name){

        
$goURL="welcome.php?error=necesitas autorización";
         
header ("Location: ".$goURL); 
     }
     
?>
espero qe te sirva no entiendo bien tu problema pero empezemos poruqe eso esta de mas
  #3 (permalink)  
Antiguo 29/01/2007, 07:28
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: cuestion sobre session

Gracias korg1988.
Pense que hay que primero recojer valores de variables y luego asignar de nuevo.
Creo que me falta conosimiento en esta area.
Probare asi, aver si funciona en 100%de los casos.
Aunque sigue siendo raro que es esto lo que daba casos de error.
Segire probando.
  #4 (permalink)  
Antiguo 29/01/2007, 10:31
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: cuestion sobre session

???
perdón, creo que no entendi bien, te refieres que en equipos remotos no valida bien la sessión o realmente que sucede??

mientras aqui te dejo el codigo aun mas pequeño
Código PHP:
<?php
session_start
();//retomamos sesion si existe y sino cronstruimos nueva
        
if(empty($_SESSION['name']))//si la variable esta vacia
    
{//redirecionamos para autorizacion
         
header ("Location: welcome.php?error=".urlencode("necesitas autorización"));//el urlencode es para codificar el espacio en blanco.
     
}
     
?>
saludos
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #5 (permalink)  
Antiguo 29/01/2007, 12:08
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Re: cuestion sobre session

No sería includo mejor hacer un
Código PHP:
$userValidos = array(); // Y suponemos que la array ya está llena de datos con usuarios validos
$pwValidos = array(); // Y lo mismo. Se supone que los indices de ambos  coinciden, como en:
// $userValido[55] = 'admin';
// $pwValido[55] = 'admin'; // La contraseña de 'admin' será 'admin'
$name $_SESSION['name'];
$pass $_SESSION['pass'];
$loggedin false;
if(!empty(
$name)) {
foreach(
$userValidos as $k => $v) {
  if(
$name == $v && $pass == $pwValidos[$k]) {
    
$loggedin true;
    break;
  }

}
}

if(
$loggedin == false)
    {
//redirecionamos para autorizacion
         
header ("Location: welcome.php?error=".urlencode("necesitas autorización"));//el urlencode es para codificar el espacio en blanco.
     

  #6 (permalink)  
Antiguo 29/01/2007, 12:20
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Re: cuestion sobre session

Hola Viktoria puedes usalo tambien de esta manera y es mucho mas entendible y mas comodo:

Código PHP:
<?
session_start
(); 
if(!isset(
$SESSION))

    
header("location: ingreso.php"); //retorna a la pagina de logueo

else 

   
$name$SESSION["name"];
   
$pass$SESSION["pass"];
   
//y el resto de codigo que deseas incluir si a iniciado session.
}
?>
espero te ayude en algo.
  #7 (permalink)  
Antiguo 29/01/2007, 12:21
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: cuestion sobre session

lo que pasa santhy es que yo estoy suponiendo que utiliza una base de datos donde encuentra al usuario que este dado de alta, sin embargo se puede hacer mas práctico con el uso del "include".

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #8 (permalink)  
Antiguo 30/01/2007, 03:46
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: cuestion sobre session

Hola chicos, gracias a todos que me han dado soluciones..
Y es verdad eits que los datos de usuarios registrados estan dentro de una db, y la unica pagina web que los compruebe es en la que redirecciono para identificarse (introducir pass y user).

Todos los codigos se comprueban lo mismo, en fin me refiero que hacen la misma tarea checkear si hay variable $_SESSION['name'] , lo que ocurre que en algunos equipos remotos se salta esta comprobacion, que yo misma lo he visto con mis propios ojos y se carga la web. En fin sigo con esto.
Y otra cuestion, entiendo que
if(empty($_SESSION['name']) no es lo mismo que (!isset($SESSION))
En primer caso se chekea la existencia de variable "name" y en segundo si hay session abierta en general , pero como en segundo caso sabemos que es de un usuario en particular?
  #9 (permalink)  
Antiguo 30/01/2007, 08:35
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Re: cuestion sobre session

Hola Viktoria en el codigo que te di es algo general por que los pasos que yo sigo para que un usuario inicie session es de la siguiente forma:

la pagina de logueo un login.php , un archivo comprueba.php que me comprueba la existencia de ese usuario y si su contraseña es correcta ademas ahi me crea la variables de session luego una pagina que es user.php a esta me redirecciona si el usuario y pass son correctos,
a partir de user ya no es necesario preguntar por el name ni el codigo de usuario por que ya los tengo en una variable de session y solamente pregunto si la session esta abierta, los datos tanto el codigo y name de usuario ya estan en una variable session estos me serviran para ver su informacion que tenga dicho usuario, bueno es como yo lo hago y me funciona perfectamente.
  #10 (permalink)  
Antiguo 30/01/2007, 09:37
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: cuestion sobre session

pues yo siempre uso algo como esto:

mi index.php
Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Edgar Israel Tamayo Silva ([email protected])" />
<title>el titulo</title>
<style type="text/css">
<!--
body {
    background-color: #FFFFFF;
}
.Estilo10 {
    font-size: 9px;
    font-weight: bold;
}
.Estilo11 {
    font-size: 16px;
    font-weight: bold;
}
.Estilo13 {font-size: 24px}
-->
</style>
</head>

<body>
<table width="1050" height="78" border="0" align="center">
  <tr>
    <td><p align="center"><span class="Estilo13">Titulo de la hoja</span><br>
    </p>
    </td>
  </tr>
</table>
<p align="center">&nbsp;</p>
<form name="login" method="post" action="verificar.php">
  <table width="23%" align="center" cellspacing="0" cellpadding="4" class="tabla2">
    <tr bgcolor="#006699"> 
      <td height="22" colspan="2" align="center" bgcolor="#FF0000"><font size="4" color="#E0F2DD"><b>Administrador</b></font></td>
    </tr>
    <tr> 
      <td width="20%" class="subtitulo" align="right"><b>Username:</b></td>
      <td width="80%"><input name="user" id="user" type="text" size="32" maxlength="60"></td>
    </tr>
    <tr> 
      <td class="subtitulo"><b>Password:</b></td>
      <td><input name="pas" id="pass" type="password" size="32" maxlength="32"></td>
    </tr>
    <tr> 
      <td colspan="2"><center>
          <input type="submit" name="Submit" value="ENTER" class="boton">
        </center></td>
    </tr>
    <tr>
      <td colspan="2" class="contenido">
            <font color="#FF0000"><center>
            <? 
                
if (!empty($_GET['x']))
                    {
                        echo 
"Password Incorrect";
                    }
                 
?></center></font></td>
    </tr>
  </table>
</form>
</body>
</html>
verificar.php(este archivo es llamado al hacer submit en el index)
Código PHP:
<?php
#Realizado por Edgar Israel Tamayo Silva(e i t s 2 @ h o t m a i l . c o m).
session_start();
include_once(
"includes/datosconexion.inc.php");//aqui se encuentran los datos para la conexion a mysql
include_once("clases/conexion.class.php");//esta es una clase para hacer conexiones y consultas a mysql
##recupero los datos pasados por post de index.php
$user=$_POST['user'];
$pas=$_POST['pas'];
##inicio mi conexion a mysql
$con=new IniciarConexion($localhost,$usuario,$pass,$base);
#abro la conexion
$con->setAbrirConexion();
#consulta para saber si el nombre de usuario y contraseña son correctos
$SqlAutentificacion="SELECT campos que necesites FROM de tu tabla WHERE usuario='$user' AND contrasenia='$pas'";
#ejecuto la consulta
$con->setEjecutarQuery($SqlAutentificacion);
if(
$con->getResultadoNumerico()>0)//si hubo coincidencias
    
{
        
$row=$con->getResultado("row");//recupero es resultado
                #lleno el arreglo con mis variables de session
        
$_SESSION['idAdmin']=$row[0];
                  
$_SESSION['nombreAdmin'] = $row[1]." ".$row[2];
        
$_SESSION['tipoAdmin']=$row[3];
        
$con->setLiberarMemoria();//liberar memoria
                
header ("Location: principal.php");//redirecciono a la página principal
    
}
else
//sino hubo coincidencias
    
{
          
session_destroy();//destruyo la session iniciada al principio
        
header ("Location: index.php?x=MNE");// lo regreso al index
    
}
$con->setCerrarConexion();//y cierro la conexion.
?>
y por último el include que ira en cada una de las páginas que quiero validar
comprobar.php
Código PHP:
<?php
//Inicio la sesión
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if (empty($_SESSION['idAdmin']))
    {
        
//si no existe, envio a la página de autentificacion
        
header("Location: index.php");
        
//ademas salgo de este script para que no continue la carga
        
exit();
    }
?>
espero que les sirva como ejemplo, cualquier duda pregunten yo lo uso y no he tenido problemas.

saludos
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #11 (permalink)  
Antiguo 30/01/2007, 10:21
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: cuestion sobre session

Que significan estas felchas ->
$con->setAbrirConexion();?
Eits perdon por ser pesada, pero que es
  #12 (permalink)  
Antiguo 30/01/2007, 10:27
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: cuestion sobre session

la variable $con ha sido asignada a una clase que maneja la conexion de la BD. Para esto debes saber un poco sobre clases en php:

http://es.tldp.org/Manuales-LuCAS/ma...xis/clases.htm

php+clases <- Ahi tienes varios resultados en google

como la variable $con hace referencia a una clase:
Código PHP:
$con=new IniciarConexion($localhost,$usuario,$pass,$base); 
, para llamar a las funciones, variables, etc. dentro de la clase se usa $con->variable o $con->funcion(), etc... leete ese articulo sobre clases...

Salu2
  #13 (permalink)  
Antiguo 30/01/2007, 10:34
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: cuestion sobre session

no tienes que pedir perdon y realmente para mi no eres pesada, yo entiendo y para eso esta el foro para preguntar, pero en fin, lo que pasa es que utilizo una clase, eso es para la POO(programación orientada a objetos) la variable $con es una instancia de un objeto la cual tiene varias funciones dentro y una de ellas es setAbrirConexión(); y para poder accesar a ella se coloca la instancia y con -> se especifica la función a utilizar por eso queda de esta forma $con->setAbrirConexion();

espero que no haberte confundido.
esta es mi clase llamada conexion.class.php
Código PHP:
<?php
#realizado por:
#    Edgar Israel Tamayo Silva
#email:
#    [email protected]
class IniciarConexion
    
{
        var 
$host;
        var 
$usuario;
        var 
$pass;
        var 
$base;
        var 
$cn;
        var 
$resultado;
        
//toma los valores para la conexion
        
function IniciarConexion($localhost,$usu,$pass,$base)
            {
                
$this->host=$localhost;
                
$this->usuario=$usu;
                
$this->pass=$pass;
                
$this->base=$base;
            }
        
//hace la conexion a mysql y seleciona la BD, mandando error si ocurre
        
function setAbrirConexion()
            {
                
$this->cn=mysql_connect($this->host,$this->usuario,$this->pass);
                if(!
$this->cn)
                    {
                        
//si ocurre error se muestra y termina la aplicación
                        
die("Error al intentar la conexión ".mysql_errno()." - ".mysql_error());
                    }    
                
$this->cnBd=mysql_select_db($this->base,$this->cn);
                if(!
$this->cnBd)
                    {
                        
//si ocurre error se muestra y termina la aplicación
                        
die("Error al selecionar la Base de Datos".mysql_errno()." - ".mysql_error());
                    }
            }
        function 
getErrorDeQuery()
            {
                return 
$this->resultado;//devuelve true si no hay error y false si existe
            
}
        
//devuelve el resultado de un select dependiendo del metodo pasado por parametro
        //por default tiene el assoc.
        
function getResultado($modo='assoc')
            {
                
$modo=strtolower($modo);
                switch(
$modo)
                    {
                        case 
"array":
                            return 
$resArray=mysql_fetch_array($this->resultado);
                            break;
                        case 
"row":
                            return 
$resRow=mysql_fetch_row($this->resultado);
                            break;                        
                        case 
"assoc":
                            return 
$resAssoc=mysql_fetch_assoc($this->resultado);
                            break;
                    }
            }
        
//devuelve el Número de registros que devolvió la consulta
        
function getResultadoNumerico()
            {
                return 
$resNum=mysql_num_rows($this->resultado);
            }
        
//ejecuta una consulta, insert, update o delete
        
function setEjecutarQuery($sqlQuery)
            {
                
$this->resultado=mysql_query($sqlQuery,$this->cn);
            }
        
//Devuelve el id afectado en un insert
        
function getIdAfectado()
            {
                return 
$idAfectado=mysql_insert_id($this->cn);
            }
        
//libera la memoria
        
function setLiberarMemoria()
            {
                
mysql_free_result($this->resultado);
            }
        
//cierra la conexion
        
function setCerrarConexion()
            {
                
mysql_close($this->cn);
            }
    }
?>
esta clase me funciona pero se puede mejorar, de echo apenas comienzo con la POO, ya le estoy haciendo algunas de estas mejoras, pero por ahora me funciona bien.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.

Última edición por eits; 30/01/2007 a las 11:08
  #14 (permalink)  
Antiguo 30/01/2007, 11:26
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: cuestion sobre session

Aqui debo detener me um poco mas. Voy a analizar este codigo
Gracias!
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 01:03.