Foros del Web » Programando para Internet » PHP »

una de sesiones

Estas en el tema de una de sesiones en el foro de PHP en Foros del Web. q tal, tengo el siguiente codigo en una pagina para validar una contraseña, una vez validada, asigno un valor a la variable de sesion session_start(); ...
  #1 (permalink)  
Antiguo 19/04/2005, 11:21
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
Pregunta una de sesiones

q tal, tengo el siguiente codigo en una pagina para validar una contraseña, una vez validada, asigno un valor a la variable de sesion

session_start();
if (isset($HTTP_SESSION_VARS['usuariovalido'])) {
$HTTP_SESSION_VARS['usuario'] = "Si";
}
else {
$HTTP_SESSION_VARS['usuario'] = "Si";
}
header( 'refresh: 5; url="pagina2.php"' );
echo 'valor de sesion es: '. $HTTP_SESSION_VARS['usuario'];

eso lo hago en pagina1.php (el echo me despliega Si,) hasta aqui vamos bien pero cuando llego a pagina2.php y hago

if ($HTTP_SESSION_VARS['usuario'] == "Si") {
echo 'bienvenido';
}


no me recupera el valor de la sesion, sino que lo hace vacio a pesar de venir de pagina1 a pagina2 directamente, alguien me puede decir que estoy haciendo mal??

Gracias!!!
__________________
eL MArgARo
  #2 (permalink)  
Antiguo 19/04/2005, 11:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Antes de acceder a una variable de sesión debes usar:

session_start();

.. consejos:
* Usa el array superglobal: $_SESSION .. no $HTTP_SESSION_VARS ..
* No hagas un "header()" y despues un echo ..
* No sé que fin tiene todas esas variables de "usuario" .. de "usuariovalido" .. si con una sóla de esas variables tendrías todo .. tan sólo basandote como ya lo haces en la existencia de esta ..
* Deberías redireccionar automáticamente . .no a tiempo usando:
header("Location: pagina2.php");
y acabar con un exit; para que no se ejecute más código hacia abajo que pudieras tener .. no es tu objetivo ese: Si redireccionas es por qué en ese punto del código pretendes abandonarlo para irte a otro.

Un saludo,
  #3 (permalink)  
Antiguo 19/04/2005, 11:56
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
tienes razon en lo de los nombres me ekivoque jeje
ya lo hice como me sugieres y funciona a excepcion de que

header("Location: pagina2.php");
exit();

cuando hago nuevamente en pagina2.php el

session_start(); <------
if ($_SESSION['usuario'] == "Si")

me manda el siguiente mensaje

Warning: session_start(): Cannot send session cookie - headers already sent
__________________
eL MArgARo
  #4 (permalink)  
Antiguo 19/04/2005, 12:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Indica el código que usas completo.

Cuando usas session_Start() o header() .. no puedes enviar nada de salida antes de esas funciones ... lease "salida": un echo "algo" .. algo de HTML .. etc .. Tendrás que reordenar tu código ..

Un saludo,
  #5 (permalink)  
Antiguo 19/04/2005, 12:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
<?
//session_start();
// intente ponerlo aqui pero no funciono jejej
?>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.style1 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #990000;
}
a:link {
color: #990000;
}
a:visited {
color: #990000;
}
.style3 {
color: #003399;
font-size: 14px;
}
.style4 {font-size: 18px}
.style5 {color: #003399}
.style6 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #003399;
font-weight: bold;
}
.style10 {
font-family: Arial, Helvetica, sans-serif;
color: #003399;
}
-->
</style>
</head>

<body>
<script LANGUAGE="JavaScript1.1">


function derecha(e) {
if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)){
alert('click derecho')
return false;
}

else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2)){
alert('click derecho')
}
}
document.onmousedown=derecha
</script>

<?
function frmDescarga(){
//session_start(); aqui tampoco funciono
if ($_SESSION['usuario'] == "Si") { ?>

aqui pongo codigo html pero si le quito el comentario al session_start en cualquiera de los 2 lugares me da el error
<?
}
else
{echo 'No está autorizado a ver ésta página ';}
}
?>
</body>
</html>
__________________
eL MArgARo
  #6 (permalink)  
Antiguo 19/04/2005, 12:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sirve de mcho que digas "aquí no funcionó" .. por favor .. aclarate con el código que usas y el error textual y completo que obtengas .. sino no hay forma de ayudarte.


Por otro lado ... la idea de autentificación es que valides antes de nada si corresponde estar o no en esa página . .si no es así . .redireccionas a otra página pero ni tan siquiera entras a la misma ..

Ejemplo
Código PHP:
<?
session_start
();
if (
$_SESSION['usuario'] != "SI"){
   
header ("Location: error.php");
   exit;
}
?>
<html>
<head>
</head>
<body>
etc .... pagina autorizada .. balblabla
</body>
</html>
De hecho .. ese código de validación puedes meterlo en un script aparte .. y llamarlo con un include() o require() mejor donde tengas una página que requiera autentificación ..

Así es como más o menos funciona mi script "Autentificator (auto-promoción xDD), por si quieres verlo:
http://php.cluster-web.com/autentificator/

Un saludo,
  #7 (permalink)  
Antiguo 19/04/2005, 13:12
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
al decir "no funciona" es que le quite los // de comentario y me arroja el siguiente mensaje

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at \\172.21.6.15\s003\ing.tk\frmContacto.php:13) in \\172.21.6.15\s003\ing.tk\frmDescarga.php on line 3


encima de la pagina

alguna idea?
__________________
eL MArgARo
  #8 (permalink)  
Antiguo 19/04/2005, 14:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Parece que ahí tienes unos "include()" que llamas al script: frmContacto.php desde frmDescagar.php (por eso te insistía en que pongas el código que usas!!!!).

Bueno .. no sé que hace tu línea 13 de frmContacto.php .. pero si por una de aquellas coincide que es la última de ese archivo .. asegurate de que no tengas espacios ni saltos de línea al final del último ?> que uses en los archivos que incluyas en otro ...

De todas formas Insisto! que indicando el código completo que usas y si hay problemas en otros "include" que llames el código de estos sería lo ideal para ver el problema concreto.

Un saludo,
  #9 (permalink)  
Antiguo 19/04/2005, 16:27
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
aki sta

index.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>X</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
include 'menu.php';
include 
'base.php';
include 
'frmInicio.php';
include 
'frmContacto.php';
include 
'frmProductos.php';
include 
'frmDownload.php';
include 
'frmDescarga.php';
?>
<table width="770" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="128" background="images/iconos/Encabezado.jpg"></td>
  </tr>
  <tr>
    <td>
    <table border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td width="30%" valign="top"><? menu(); ?></td>
          <td width="70%">
          <?
              
switch($_GET["id"]){
                case 
"msg":
                    if(!empty(
$_SESSION['usuariovalido'])){ unset($_SESSION['usuariovalido']);}
                    
frmMsg($_GET["idForo"], $_GET["idMsg"] );
                break;
                case 
"Productos":
                    if(!empty(
$_SESSION['usuariovalido'])){ unset($_SESSION['usuariovalido']);}
                    
frmProductos();
                break;
                case 
"Downloads":
                    if(!empty(
$_SESSION['usuariovalido'])){ unset($_SESSION['usuariovalido']);}
                    
frmDownload();
                break;
                case 
"Descarga":
                    
frmDescarga();
                break;
                case 
"Contacto":
                    if(!empty(
$_SESSION['usuariovalido'])){ unset($_SESSION['usuariovalido']);}
                    
frmContacto();
                break;
                default:
                    if(!empty(
$_SESSION['usuariovalido'])){ unset($_SESSION['usuariovalido']);}
                    
frmInicio();
                break;
            }
//switch
            
          
?>
          </td>
        </tr>
    </table>
    </td>
  </tr>
  <tr>
    <td height="22"><? ContactoBase(); ?></td>
  </tr>
</table>
</body>
</html>
y la otra pagina es frmcontacto.php
Código PHP:
<html>
<head>
<title>frmContacto.jpg</title>
<meta http-equiv="Content-Type" content="text/html;">
<!--Fireworks MX 2004 Dreamweaver MX 2004 target.  Created Mon Apr 18 17:12:42 GMT-0500 2005-->
<script language="JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

//-->
</script>
</head>
<body bgcolor="#ffffff" onLoad="MM_preloadImages('images/imgContacto/frmContacto_r2_c2_f2.jpg');">
<?
function frmContacto(){
?>
<table border="0" cellpadding="0" cellspacing="0" width="620">
<!-- fwtable fwsrc="frmContacto.png" fwbase="frmContacto.jpg" fwstyle="Dreamweaver" fwdocid = "1487140178" fwnested="0" -->
  <tr>
   <td><img src="images/imgContacto/spacer.gif" width="253" height="1" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="148" height="1" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="219" height="1" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="1" height="1" border="0" alt=""></td>
  </tr>

  <tr>
   <td colspan="3"><img name="frmContacto_r1_c1" src="images/imgContacto/frmContacto_r1_c1.jpg" width="620" height="209" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="1" height="209" border="0" alt=""></td>
  </tr>
  <tr>
   <td rowspan="2"><img name="frmContacto_r2_c1" src="images/imgContacto/frmContacto_r2_c1.jpg" width="253" height="159" border="0" alt=""></td>
   <td><a href="mailto:[email protected] " onMouseOut="MM_swapImgRestore();" onMouseOver="MM_swapImage('frmContacto_r2_c2','','images/imgContacto/frmContacto_r2_c2_f2.jpg',1);"><img name="frmContacto_r2_c2" src="images/imgContacto/frmContacto_r2_c2.jpg" width="148" height="18" border="0" alt=""></a></td>
   <td rowspan="2"><img name="frmContacto_r2_c3" src="images/imgContacto/frmContacto_r2_c3.jpg" width="219" height="159" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="1" height="18" border="0" alt=""></td>
  </tr>
  <tr>
   <td><img name="frmContacto_r3_c2" src="images/imgContacto/frmContacto_r3_c2.jpg" width="148" height="141" border="0" alt=""></td>
   <td><img src="images/imgContacto/spacer.gif" width="1" height="141" border="0" alt=""></td>
  </tr>
</table>
<?
}
?>
</body>
</html>
si te fijas en ningun lado llamo a session_start();
donde la llamo es aca en esta otra pagina

Código PHP:
<!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" xml:lang="en" lang="en">
<head>
<title>X</title>
</head>
<body>
    <?
    
//if (Session("usuariovalido")<>"ActivoX")then

        
$username "usuario";
        
$password1 "pass";
        
$dbName   "db";
        
$hostname "192.168.0.1";
        
        
mysql_connect($hostname,$username,$password1) or print "Error en la Conexión";
        
mysql_select_db("$dbName") or print "Error en la Base de datos";
        
$ls_sql "SELECT * from usuario where cl_usuario='"$_POST["cl_usuario"] ."'";
        
$rs mysql_query($ls_sql);
        if (
$renglon mysql_fetch_array($rs)) {
            if (
$renglon["password"]==$_POST["password"]) 
                {
                
session_start();
                if (isset(
$_SESSION['usuariovalido'])) {
                   
$_SESSION['usuariovalido'] = "SI";
                }
                else {
                    
$_SESSION['usuariovalido'] = "SI";
                }
                
header("Location: index.php?id=Descarga");
                exit();
                }
            else
                {
                
header'refresh: 3; url="index.php?id=Downloads"' ); # redirects to our homepage
                
echo '<h1>Clave de acceso incorrecta.</h1>';
                }
                                            }
        else
            {
            
header'refresh: 3; url="index.php?id=Downloads"' ); # redirects to our homepage
            
echo '<h1>Clave de acceso incorrecta.</h1>';
            }
        
mysql_close();
    
?> 
</body>
</html>
despues de esto debe llamar a la siguiente pagina y es aqui donde tengo el lio que no me muestra lo que debe, me muestra el mensaje de error que le puse o si le pongo el session_start(); me muestra el warning que envie antes
Código PHP:
<html>
<head>

<title>X</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.style1 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #990000;
}
a:link {
    color: #990000;
}
a:visited {
    color: #990000;
}
.style3 {
    color: #003399;
    font-size: 14px;
}
.style4 {font-size: 18px}
.style5 {color: #003399}
.style6 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #003399;
    font-weight: bold;
}
.style10 {
    font-family: Arial, Helvetica, sans-serif;
    color: #003399;
}
-->
</style>
</head>

<body>
<script LANGUAGE="JavaScript1.1">

function derecha(e) {
if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)){
alert('xxx')
return false;
}

else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2)){
alert('xxx')
}
}
document.onmousedown=derecha
</script>

<? 
    
    
function frmDescarga(){
    
session_start();   // con esta declaracion me da errror 
    
if ($_SESSION['usuariovalido']) { ?>

        codigo html, lo quite porque es mucho, pero el lio es solo con el session_start, nada q ver con el codigo html
<?
                             
}
     else
        {echo 
'No está autorizado a ver ésta página ' $_SESSION['usuariovalido']; } // no me pone el valor de la sesion lo pasa como vacio
    
}
 
?>
</body>
</html>
__________________
eL MArgARo

Última edición por Cluster; 19/04/2005 a las 16:54 Razón: Coloreado código para facilitar lectura.
  #10 (permalink)  
Antiguo 19/04/2005, 17:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En esa otra página (el tercer código que muestras) .. NO es necesari ni corresponde ese HTML que ahí usas .. Fijate bien que hace ese script:

Valida en funcion de algunas consultas SQL sobre unos datos .. según se cumpla una u otra condición -siempre- se acaba redireccionando a algun síto (página/script). NO muestres ahí ningún mensaje y luego redirecciones (como haces con esos header("refresh ...") .. El error muestralo en la página que redireccionas no en esa. Para eso puedes pasar una variable por una sesión o por el URL para indicar que sucedió un error.

por otro lado .. No le veo mucho sentido a:

Código PHP:
if (isset($_SESSION['usuariovalido'])) { 
                   
$_SESSION['usuariovalido'] = "SI"
                } 
                else { 
                    
$_SESSION['usuariovalido'] = "SI"
                } 
Por qué en lugar de guardar un valor en una variable tipo "usuariovalido" = SI .. no guardas el valor del nombre de ese usuario .. o su ID .. por lo menos te servirá para usarlo en tu aplicación .. desde mostrar "es UD el usuario nombre: PEPITO" .. hasta usar ese ID para relacionarlo con acciones que haga en tu sistema .. La validación es la misma basada en su existencia: isset($_SESSION['nombre_usuario']) .. o empty() ...

Del resto ya me perdí .. ponle nombre a los códigos que pongas si corresponden a alguno de esos include() que llamas .. Recuerda que NUNCA puede existir algo de HTML enviado antes de un session_Start() (por si alguno de esos "include()" contiene algun session_start().

Un saludo,
  #11 (permalink)  
Antiguo 19/04/2005, 18:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 1
lo buscare, aunque lo dudo, porque solo tendo 2 session_start(); uno cuando creo la sesion y otra cuando la comparo, a mi tambien se me hace raro ese comportamiento, pero deja reviso los include para revisar bien q no se me haya ido alguno, lo que pasa es que puse esos include porque la pagina que quiero mostrar esta en una tabla, no en frames, osea en una celda de la tabla que esta en index.php, se muestra el contenido de un include y cada include manda el codigo de una pagina completa, use la tabla en lugar de frames porque necesitaba el scroll de la pagina completa, no solo de una parte de la pagina(como lo hacen los frames)

dejame reviso eso y mañana te respondo el resultado de la busqueda

Gracias!!!
__________________
eL MArgARo
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 11:17.