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. Buenas tardes, Estoy realizando una pagina web con bbdd mysql donde en tengo los siguienets ficheros: 3 ficheros de marcos. dos top , el central. ...
  #1 (permalink)  
Antiguo 12/07/2013, 04:41
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Problema con sesiones

Buenas tardes,

Estoy realizando una pagina web con bbdd mysql donde en tengo los siguienets ficheros:

3 ficheros de marcos. dos top , el central.

index.html donde ajusto los frames.

conex.php --> Archivo donde estan los datos de la bbdd

menu.php --> 4 fichero del marco donde esta un menu que genero a mi deseo con datos de una bbdd.

enviar.php --> desde menu.php envio a enviar.php , segun que escojamos del menu saldran dichos datos.

search.php --> Tengo un buscador

login.php --> Formulario para acceso

ingreso.php --> El que hace todas las comprobaciones para acceder

ingreso2.php --> Y el ingreso2 segun si ha ido bien o no unas comprobaciones del ingreso.php muestra una pagina o otra.

Despues de haber peusto esto en situacion . Mi pregunta es como hago para que si yo entro en index.html diga que no estoy autorizado y me redirija al login.php ya que estoy tratando con sesiones pero no hay manera.

Os voy a pegar el codigo de los tres ultimos ficheros porque creo que es donde no estoy poniendo bien las cosas .

Tampoco se si en el resto de paginas que tengo he de poner algo.

login.php
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//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" />
<title>Login to access the secret files!</title>
<link rel="stylesheet" type="text/css" href="css/default.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</head>

<? session_start(); ?>


<body>
<div id="login">
    <form method="post" action="ingreso.php">
    	<h2>Login <small>enter your credentials</small></h2>
        <p>
        	<label for="name">Username: </label>
            <input type="text" name="usuario" />
        </p>
        
        <p>
        	<label for="pwd">Password: </label>
            <input type="password" name="clave" />
        </p>
        
        <p>
        	<input type="submit" id="submit" value="Login" name="submit" />
        </p>
    </form>
</div>
</body>
</html> 
ingreso.php
Código PHP:

<? 
session_start
(); 

include(
'conex.php');

$_SESSION["user"]=$_POST['usuario']; 
$_SESSION["pass"]=$_POST['clave']; 
$_SESSION["falla"]=0?> 
<meta http-equiv="refresh" content="3; url=ingreso2.php" />

<html>

<head></head>
<body>
<? $username=$_POST['usuario']; $password=$_POST['clave']; 



    if(empty(
$username)) { 
        echo 
"No ha ingresado un nombre de usuario. <br> 
        Sera redirigido de vuelta."

        
$_SESSION["falla"]=1
    }


    else { 

        if(empty(
$password)) { 
            echo 
"No ha ingresado una clave. <br> 
            Sera redirigido de vuelta."

            
$_SESSION["falla"]=1
        }


        else { 


                    
$passwordenc md5 $password );

    
$querypass mysql_query("SELECT accesskeepass FROM passaccess WHERE accesskeepass = '$passwordenc'") or die(mysql_error());
        
$querypass1 mysql_fetch_array($querypass);


$queryuser mysql_query("SELECT user FROM user WHERE user = '$username'") or die(mysql_error());
        
$queryuser1 mysql_fetch_array($queryuser);


            if(
$queryuser1['user'] != $username){
                
$error=mysql_error(); 
                print 
$error$_SESSION["falla"]=1
                exit(); 
            } 


            if(
mysql_affected_rows()==0) { 
                echo 
"El usuario no fue encontrado. <br> 
                Sera redirigido de vuelta."

                
$_SESSION["falla"]=1
                exit(); 
            } 

                else { 



                        
$nombre=$queryuser1['user']; 



                    if(
$username==$queryuser1['user']) { 
                        if(
$passwordenc==$querypass1['accesskeepass']) { 
                            echo 
"<b>Bienvenido $nombre</b>. <br> 
                                Espere mientras es redirigido"

                                
$_SESSION["nombre"]=$nombre
                        } else { 
                                echo 
"Hay un error en la clave. <br> 
                                      Espere mientras es redirigido"

                                      
$_SESSION["falla"]=1
                            } 
                            } else { 
                                    echo 
"Hay un error en el nombre de usuario. <br> 
                                            Espere mientras es redirigido"

                                        
$_SESSION["falla"]=1
                    } 


                        } 
            } 
        }         
?>



</body>



</html>
ingreso2.php

Código PHP:



    <? session_start();

    
/* 
    Iniciamos sesión dentro de esta página también mediante 
    la función session_start(); 
    */
    
if($_SESSION["falla"]==0) { 
    
$_SESSION["autorizacion"]="si";

    
header("Location: index.html");
    }

   
    else { 
    unset(
$_SESSION["falla"]); 
    
session_destroy(); 
    
header("Location: login.php"); 
    } 
    
?>
Este codigo lo encontre navegando y lo he adaptado a mis necesidades y la funcion del login lo hace perfecto lo qeu no se como conseguir el control de seguirdad.

Gracias por sus respuestas.
  #2 (permalink)  
Antiguo 12/07/2013, 04:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con sesiones

<? session_start(); ?> esta linea de be ser la primera de todas...

Tu mismo dices que quieres que pase algo en el momento de entrar en el index.html y no nos lo muestras...

Primero si tienes una web php usa index.php, a partir de esto lo empezaras a ver claro. Si en index.php inicias una session ya puedes empezar a decidir que es lo que puede hacerse con esa session, seguramente uno de los frames debería mostrar el formulario de logueo. Si la session ya tiene nombre de usuario validado, ese mismo formulario de logueo debe mostrar algo distinto o redirigirse a otra pagina....

Primeras lineas del index.php

Código PHP:
Ver original
  1. $_SESSION["autorizacion"]="no"; ?>

Para una variable "autorizado" es mucho mejor usar true o false .....(son valores booleanos)
Código PHP:
Ver original
  1. $_SESSION["autorizacion"]=false;

con lo que podras hacer

Código PHP:
Ver original
  1. if($_SESSION["autorizacion"]){...}else{....}

y funcionara el condicional.



Usar frames es algo anticuado no se que efectos puede tener en la session, mejor usa divs y refrescalas con AJAX.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 12/07/2013 a las 05:01
  #3 (permalink)  
Antiguo 12/07/2013, 05:04
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con sesiones

Aqui te adjunto el index.html aqui es donde marco los frames solamente .

He corregido lo que decias de poner lo de la session arriba del todo.

Y bueno lo de los divs con refresco no lo llevo nada bien . Si puede ser preferiria seguir con los frames.


Código PHP:
<? 
session_start
(); 
if(
$_SESSION["autorizacion"]="si"){


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>KeePass</title>
</head>

<frameset cols="20%,80%" frameborder="0" border="0" framespacing="0">
<frameset rows="12%,88%*" frameborder="0" border="0" framespacing="0">

      <frame name="top" src="top.html" marginheight="0" marginwidth="0" scrolling="auto" noresize>
    <frame name="menu" src="menu.php" marginheight="0" marginwidth="0" scrolling="auto" noresize>
</frameset> 

<frameset rows="12%,88%*" frameborder="0" border="0" framespacing="0">
    <frame name="alto" src="topnew.htm" frameborder="0" border="0" framespacing="0">
    <frame name="content" src="content.html" marginheight="0" marginwidth="0" scrolling="auto" noresize>
</frameset> 
</frameset>
</html>

<? 
}else{

echo 
"No estas autenticado , se te va a redirigir al login.";
header("Location: login.php"); 
}


?>
  #4 (permalink)  
Antiguo 12/07/2013, 05:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con sesiones

Yo he puesto
Código PHP:
Ver original
  1. $_SESSION["autorizacion"]="no"; ?>

no puedes hacer

if($_SESSION["autorizacion"]="si"){

antes de crear la variable, ademas debería ser if($_SESSION["autorizacion"]=="si"){

Si lo quieres hacer de esta forma haz mejor lo siguiente

Código PHP:
Ver original
  1. if (!isset($_SESSION["autorizacion"])) $_SESSION["autorizacion"]=false;
  2.  
  3. if($_SESSION["autorizacion"]){
  4.  
  5. ....
  6.  
  7.  
  8. ?>

Es decir inicias la session, si la variable autorizacion no existe la creas como falso y luego haces el condicional....si ya existia se mantendra el valor prexistente (sea true o false).

Con el condicional tambien podrias modificar el src de los frames ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 12/07/2013, 05:50
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con sesiones

vale quimfv ahora quedaria algo asi :

Código PHP:

<? session_start();
if (!isset(
$_SESSION["autorizacion"])) $_SESSION["autorizacion"]=false;
 
if(
$_SESSION["autorizacion"]){ 

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>KeePass</title>
</head>

<frameset cols="20%,80%" frameborder="0" border="0" framespacing="0">
<frameset rows="12%,88%*" frameborder="0" border="0" framespacing="0">

      <frame name="top" src="top.html" marginheight="0" marginwidth="0" scrolling="auto" noresize>
    <frame name="menu" src="menu.php" marginheight="0" marginwidth="0" scrolling="auto" noresize>
</frameset> 

<frameset rows="12%,88%*" frameborder="0" border="0" framespacing="0">
    <frame name="alto" src="topnew.htm" frameborder="0" border="0" framespacing="0">
    <frame name="content" src="content.html" marginheight="0" marginwidth="0" scrolling="auto" noresize>
</frameset> 
</frameset>
</html>

<? 
}else{

echo 
"No estas autenticado , se te va a redirigir al login.";
header("Location: login.php"); 
}


?>
Esto que lo he de poner en todas las paginas ? incluso las otras html de los frames que tengo ?

Tengo que quitar de todas las paginas lo de

Código PHP:

    <? session_start();
    
$_SESSION["autorizacion"]="no"?>
???
  #6 (permalink)  
Antiguo 12/07/2013, 06:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con sesiones

Código PHP:
Ver original
  1.     if($_SESSION["autorizacion"]...

Si debes hacer un control al inicio de cada pagina, debes comprobar que autorización es true y que la session es la misma (http://php.net/manual/es/session.idpassing.php)... el uso de divs y ajax lo simplificaría mucho.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 12/07/2013, 06:39
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con sesiones

perdona quimfv como hago para comprobar que la session es la misma?

Podrias enseñarme un ejemplo con el div?
  #8 (permalink)  
Antiguo 12/07/2013, 06:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con sesiones

http://php.net/manual/es/session.idpassing.php
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 12/07/2013, 07:42
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con sesiones

Lo siento quimfv pero no entiendo nada de sesiones , necesito mas qeu una url ya que no entiendo que significa nada de lo que hay ahi.

Entonces , dicho eso he puesto el contenido siguiente en todas mis paginas pero ahora cuando me quiero logar no hace nada xDD

Esto de las sesiones no lo entiendo.

Código PHP:

<? session_start();
if (!isset(
$_SESSION["autorizacion"])) $_SESSION["autorizacion"]=true;
 
if(
$_SESSION["autorizacion"]){ 


el codigo que ejecuta el fichero

}else{

echo 
"No estas autenticado , se te va a redirigir al login.";
header("Location: login.php"); 
}

?>
  #10 (permalink)  
Antiguo 12/07/2013, 12:30
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con sesiones

He conseguido realizar el tema de las sesiones solo que tengo un frame que es menu.php que al cargarse no me salta el menu sino que me salta el login.php en ese frame cuando yo lo que quiero es que me salte el menu.

Este es el codigo del menu.php.

Código PHP:
<?
        
include('seguridad.php');
    include(
'conex.php'); 


    
$usuario=$_SESSION["user"];

    
$creartable "CREATE TABLE $usuario (
              `id_menu` int(11) NOT NULL AUTO_INCREMENT,
             `name` varchar(50) NOT NULL,
              `url` varchar(50) NOT NULL,
              `description` varchar(50) DEFAULT NULL,
              PRIMARY KEY (`id_menu`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
;

    
$creartable1 mysql_query($creartable);

    
    
$iduser="SELECT iduser from user where user='$usuario'";
    
$resid=mysql_query($iduser);

    while (
$resid2 mysql_fetch_array($resid)) {
    
$iduserselectivo=$resid2['iduser'];
    } 

    
$men="SELECT idmenu from access where iduser='$iduserselectivo'";
    
$remenu=mysql_query($men);

    while (
$remenu2 mysql_fetch_array($remenu)) {

    
$idmenuselec=$remenu2['idmenu'];
    

    
$tabmenu="SELECT * FROM menu where id_menu='$idmenuselec'";
    
$restabmenu=mysql_query($tabmenu);

    while (
$restabmenu2 mysql_fetch_array($restabmenu)) {

        
$id_menu=$restabmenu2['id_menu'];
        
$name=$restabmenu2['name'];
        
$url=$restabmenu2['url'];
        
$description=$restabmenu2['description'];

    
$queryinsmen="INSERT INTO $usuario (id_menu,name,url,description) VALUES ('$id_menu','$name','$url','$description')";

    
mysql_query($queryinsmen);

    }
    } 





    
$linea="SELECT * FROM $usuario";
    
$result=mysql_query($linea);
    
$menu "\n";


    while (
$row mysql_fetch_array($result))
    {
    
 
        
$linea2="SELECT * FROM submenu WHERE id_menu='".$row['id_menu']."'";
        
$result2=mysql_query($linea2);
        
$cant mysql_num_rows($result2);

        
$query100 "SELECT COUNT(DISTINCT tipo) FROM keepass where site='".$row['name']."';"
        
$result100 mysql_query($query100);
        
$count100 mysql_fetch_array($result100);


        
 
        
        
        
$m=$row['url'];
    
        if(
$cant == 0)
            {
                
$menu .= "<li><a href=$m>".$row['name']." </a></li>\n";
            }
            else
            {    
                
                    
$menu .= "<li id=services>\n <a href=$m>".$row['name']." <span>$count100[0]</span></a>\n    <ul id=subMenu>\n";
                while (
$row2 mysql_fetch_array($result2))
                {
                    
                    
$submenu=$row2['description'];
                    
$varid=$row['name'];
                    
$categ=$row2['id_categori'];

                    
$linea3="SELECT name FROM categoria WHERE id_categori='".$row2['id_categori']."'";
                    
$result3=mysql_query($linea3);
                    
$row3 mysql_fetch_array($result3);
                    
        
$query200 "SELECT COUNT(tipo) FROM keepass where site like '$varid' and tipo like '$submenu'"
        
$result200 mysql_query($query200);
        
$count200 mysql_fetch_array($result200);
                    


                    
$menu .="<li><a target=\"content\" href=enviar.php?var1=$submenu&var2=$varid>".$row3['name']." <span>$count200[0]</span></a></li>\n";

                    
//$menu .="<li><a href=$submenu>".$row2['name']."</a></li>\n";
            //echo '<td class=Titulo2 width=100 bgcolor=#' . $color_celda . '><a href="enviar.php?id=' . $row['sede'] . '" method="post">' . $row['nomsede'] . '</a></td>';

                        
}
                    
$menu.="    </ul></li>\n";
                }

    }

    
$menu .="";
    
$drop="Drop table $usuario";
    
mysql_query($drop);
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        
        <title>Vertical Navigation Menu: CSS3 Coded</title>
        
        <link rel="stylesheet" href="css/styles.css">
        
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
                        
    </head>
<body>
<form id="formulario" name="formulario" method="post">
<div id="wrapper">

    <ul class="menu">
<?
    
echo $menu;
?>

</div>
</form>
<script type="text/javascript">
    $(function() {
    
        var menu_ul = $('.menu > li > ul'),
               menu_a  = $('.menu > li > a');
        
        menu_ul.hide();
    
        menu_a.click(function(e) {
            e.preventDefault();
            if(!$(this).hasClass('active')) {
                menu_a.removeClass('active');
                menu_ul.filter(':visible').slideUp('normal');
                $(this).addClass('active').next().stop(true,true).slideDown('normal');
            } else {
                $(this).removeClass('active');
                $(this).next().stop(true,true).slideUp('normal');
            }
        });
    
    });
</script>

</body>
</html>
seguridad.php

Código PHP:
<?php
//inicio de la session

session_start();

//comprueba que el usuario esta autentificado

if($_session["autorizacion"]!="1"){
    
//si no existe, se dirige a la pagina de inicio 
    
header("Location:login.php");
    
//salimos del script
    
exit();
}
?>
  #11 (permalink)  
Antiguo 14/07/2013, 11:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con sesiones

A ver no era un link cualquiera era un link a la pagina del manual oficial sobre sessiones. Vas un poco perdido quizas un momento de leer el manual te facilitaria las cosas....

Ademas vas cambiando la forma en que lo enfocas por lo que es dificil de seguierte

if($_session["autorizacion"]!="1"){

Si $_session["autorizacion"] es true no es "1" en todo caso es 1 o true pero no "1".

No te voy a poner el link ya que no te gustan pero si no sabes la diferencia entre true, 1 y "1" quizas el link que necesitas empieza por php y termina por .org.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: formulario, html, mysql, select, sesiones, sql, tabla, usuarios, variable, variables
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 19:52.