Foros del Web » Programando para Internet » PHP »

Problemas son Sesiones

Estas en el tema de Problemas son Sesiones en el foro de PHP en Foros del Web. Holass de nuevo, estoy empezando a usar variables de sesion y tengo el sgte codigo: en manifprin.php esto: <? session_start(); $_SESSION['Xl']=$_POST['txtl']; //txtl de acceso.php $_SESSION['Xp']=$_POST['txtp']; ...
  #1 (permalink)  
Antiguo 15/12/2005, 17:31
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
Problemas son Sesiones

Holass de nuevo, estoy empezando a usar variables de sesion y tengo el sgte codigo:

en manifprin.php esto:

<?
session_start();
$_SESSION['Xl']=$_POST['txtl']; //txtl de acceso.php
$_SESSION['Xp']=$_POST['txtp']; //txtp de acceso.php
$Xl=$_SESSION['Xl'];
$Xp=$_SESSION['Xp'];

include('conexion.php');
$link = Conectarse();
$Rlogin = mysql_query("select * from acceso where login='$Xl' and psw='$Xp'",$link);
$FilaLog = mysql_fetch_array($Rlogin);
$Items = mysql_affected_rows($link);
if ($Items == 0)
{
Header("Location: acceso.php");
}
?>
<html>
<body>
<form action="transdatos.php">
.........
</form>
</body>
</html>


en transdatos.php esto

<?
session_start();
$txtl=$_SESSION['Xl'];
$txtp=$_SESSION['Xp'];

.....
header("Location: manifprin.php");
?>

ahora esta pagina transdatos.php me guarda en $txtl y $txtp perfectamente pero cuando ejecuta lo de rojo: header("Location: manifprin.php"); no lo hace pues se pasa a acceso.php es como que si no recibiera esos datos.

He revisado unas paginas y en conclusion me dicen que no es recomendable forzar al php.ini (session.auto_start = ON) alguien podria darme ayudarme con esto pues no se usar muy bien sesiones asi que si hay algun error en mi codigo y alguna solucion ps haganmelo saber.

Gracias
  #2 (permalink)  
Antiguo 16/12/2005, 06:02
 
Fecha de Ingreso: julio-2005
Mensajes: 19
Antigüedad: 12 años, 4 meses
Puntos: 0
Lo mismo

Tengo exactamente el mismo problema.
  #3 (permalink)  
Antiguo 16/12/2005, 06:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Las variables de sesión no quedan disponibles hasta la próxima petición (recarga, link que salte a otro script .. etc) al servidor .. por ende, NUNCA se debería hacer la asiganción de variables que hacían . .en su defecto .. si a este script le llegan por $_POST ciertas variables y en el mismo flujo del script se ha de crear una variable de sesión + usar esa variable .. usala directamente:

Código PHP:
<?
session_start
(); 
$_SESSION['Xl']=$_POST['txtl']; //txtl de acceso.php
$_SESSION['Xp']=$_POST['txtp']; //txtp de acceso.php

include('conexion.php');
$link Conectarse();
$Rlogin mysql_query("select * from acceso where login='".$_POST['Xl']."' and psw='".$_POST['Xp']."'",$link);
$FilaLog mysql_fetch_array($Rlogin);
$Items mysql_affected_rows($link);
if (
$Items == 0)
{
Header("Location: acceso.php");
exit;
}
?>
<html>
<body>
<form action="transdatos.php">
.........
</form>
</body>
</html>
Por otra parte .. despues de un redireccionamiento tipo header("Location ...") .. la idea de usarlo es terminar la ejecución de script en ese punto y mandar al "navegador" (cliente) que cambie la página que está viendo por la que se le indica. Por ende .. hay que terminar expresamente la ejecución del script (con exit), sino, .. el script sigue su curso y seguirá ejecutandose lo que venga a continuación.

Cita:
ahora esta pagina transdatos.php me guarda en $txtl y $txtp perfectamente pero cuando ejecuta lo de rojo: header("Location: manifprin.php"); no lo hace pues se pasa a acceso.php es como que si no recibiera esos datos.
Pero .. cual es el código completo que usas?. Mencionas un tal "acceso.php" que no se vé de donde sale. Haces otro redireccionamiento? .. Ten presente lo del "exit" que mencioné .. usalo en todo header("Location ...") a continuación.


Un saludo,
  #4 (permalink)  
Antiguo 16/12/2005, 06:54
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
oh!, y ahora kien nos ppodria ayudar aun no lo resuelvo .
  #5 (permalink)  
Antiguo 16/12/2005, 07:00
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
ok cluster gracias,
Ah!, en acceso.php es como una portal de entrada donde recibes el nombre del usuario y su contraseña asi:

<form action="manifprin.php" method="post" name="formclave">
LOGIN: <input name="txtl" type="text" class="boton" id="txtl" size="16"/>

PASSWORD:<input name="txtp" type="password" class="boton" id="txtp" size="16" />

<input border="0" name="imageField" type="image" src="botones servicios/boton_aceptar.jpg"/>

</form>
  #6 (permalink)  
Antiguo 16/12/2005, 07:08
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
<?
session_start();
$_SESSION['Xl']=$_POST['txtl']; //txtl de acceso.php
$_SESSION['Xp']=$_POST['txtp']; //txtp de acceso.php

include('conexion.php');
$link = Conectarse();
$Rlogin = mysql_query("select * from acceso where login='".$_POST['Xl']."' and psw='".$_POST['Xp']."'",$link);

no funcionaaaa desde acceso.php
:( :( :(
  #7 (permalink)  
Antiguo 16/12/2005, 07:20
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
creo que te equivocaste cluster? era asi:

$Rlogin = mysql_query("select * from acceso where login='".$_POST['txl']."' and psw='".$_POST['txtp']."'",$link);

si estoy mal corrigeme pork asi si funciona ;)
  #8 (permalink)  
Antiguo 16/12/2005, 07:28
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
otra cosa:
aun no funciona lo que me dices en cuanto a header en transdatos.php igual no me lee mis variables de usuario y contraseña en manifprin.php y me bota a acceso.php :(
  #9 (permalink)  
Antiguo 16/12/2005, 07:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, .. asi es .. (me confundí con las variables y sus nombres).

Por otro lado .. ahora que lo veo. No debes uso del:

$Items = mysql_affected_rows($Rlogin,$link);

sino contar el n° de registros que resultó .. no los que fueron "afectados" (útil cuando se hace un "delete" en masa o un "update" en masa ..).

Código PHP:
$Items mysql_num_rows($Rlogin,$link); 
if (
$Items >0){
   
$FilaLog mysql_fetch_array($Rlogin); 
} else {
   
Header("Location: acceso.php"); 
   exit; 

Si hay resultados .. los obtienes con mysql_fetch_xxx() .. y si no hay resultados .. redireccionas a tu página de acceso.

Un saludo,
  #10 (permalink)  
Antiguo 16/12/2005, 07:47
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
hice lo que me dicess pero me origina error:

Warning: Wrong parameter count for mysql_num_rows() in /home/andcorp/public_html/prueba/manifprin.php on line 22

Warning: Cannot modify header information - headers already sent by (output started at /home/andcorp/public_html/prueba/manifprin.php:22) in /home/andcorp/public_html/prueba/manifprin.php on line 26

donde mi linea 22: $Items = mysql_num_rows($Rlogin,$link);

y mi linea 26: header("Location: acceso.php");
  #11 (permalink)  
Antiguo 16/12/2005, 07:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Podrías revisar la documentación de PHP .. (a veces nos equivocamos):

http://tr2.php.net/manual/en/functio...l-num-rows.php

Quita el ,$link que no es necesario ..

Un saludo,
  #12 (permalink)  
Antiguo 16/12/2005, 08:05
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
ok, si tenias razon eso de link no es necesario no me habia dado cuenta ahora todo esta bien pero en la parte de transdatos a manifprin no funciona me vota a acceso.php
  #13 (permalink)  
Antiguo 16/12/2005, 08:11
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
mi codigo completo en transdatos:

Código PHP:
<?php 
session_start
();
$txtl=$_SESSION['Xl']; 
$txtp=$_SESSION['Xp'];

$Xcant $txtc;
$Xfactual $factual;
$Xid_acceso trim($_POST['txtacceso']);

include(
'conexiond.php');
$link=Conectarse();
$Rsnumintreportes mysql_query("select max(nacceso) as numacceso from distribuidores",$link);
$FilaClie mysql_fetch_array($Rsnumintreportes);
$Xnumacceso $FilaClie["numacceso"]+1;
    
$Rsnman mysql_query("select nman from distribuidores where id_acceso = $Xid_acceso",$link);

$Xnmanifiesto mysql_fetch_array($Rsnman);

$Xnombres trim($_POST['txtnombres']);
$Xetransp trim($_POST['txtetransp']);
$Xtdoc trim($_POST['tdoc']);
$Xnrec trim($_POST['n_recibo']);
$Xfech trim($_POST['txtfecha1']);
$Xprov $_POST['txtprov'];

if(
$Xid_acceso == 1) {
     elseif (
Rtrim($dep)=="1")
    { 
$Xdis "Arequipa" ;}
    elseif (
Rtrim($dep)=="2")
    { 
$Xdis "Cajamarca" ;    }
     elseif (
Rtrim($dep)=="3")
    { 
$Xdis "Cusco" ;    }
             else {
$Xdis "Oficina Principal-Lima";}

$Xman $_POST['txtm'];
if (
$Xnmanifiesto[0]==$Xman){}
else{
$j=0;
for (
$i 1;$i <= $Xcant;$i++)
{
$xchk $_POST["chk".$i];         //UN CHECKBOX
    
if ($xchk==""){
             if(
$Xid_acceso==1){$Xnsitem.$i;}
    else{    
$Xns ns.$i; }
    
$Xcli cli.$i;
    
$Xcon con.$i;
    
$Xdir dire.$i;

    
$Xdep dis.$i;


    
$Xobs obs.$i;
    
$Xpeso peso.$i;
    
$Xtpeso txttpeso.$i;
    
$Xtpaquete tpaquete.$i;
    
$Xtservicio tservicio.$i;
    
    
$Xitem $_POST["$Xitem"];
    
$Xns $_POST["$Xns"];
    
$Xcli $_POST["$Xcli"];
    
$Xcon $_POST["$Xcon"];
    
$Xdir $_POST["$Xdir"];

    
$Xdep $_POST["$Xdep"];

    
$Xobs $_POST["$Xobs"];
    
$Xpeso $_POST["$Xpeso"];
    
$Xtpeso $_POST["$Xtpeso"];
    
$Xtpaquete $_POST["$Xtpaquete"];
    
$Xtservicio $_POST["$Xtservicio"];

    
$j=$j+1;
    
    if (empty(
$Xpeso)) {  $Xpeso "NULL";} 
    
mysql_query("insert into distribuidores(item,nombres,n_sobre,cliente,consignado,direccion,distrito,ciudad,observacion,provincia,etransp,tpaq,fecha,trec,nrec,id_acceso,nman,nacceso,peso,tpeso,tservicio,fechaactual)
values ($j,'$Xnombres','$Xns','$Xcli','$Xcon','$Xdir','$Xdep','$Xdis','$Xobs','$Xprov','$Xetransp','$Xtpaquete','$Xfech','$Xtdoc','$Xnrec',$Xid_acceso,$Xman,$Xnumacceso,$Xpeso,'$Xtpeso','$Xtservicio','$Xfactual')"
,$link);
}
}
}
header("Location: manifprin.php");
exit;
?>
nada mas ;)

Última edición por Cluster; 16/12/2005 a las 08:20
  #14 (permalink)  
Antiguo 16/12/2005, 08:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
lily_cv

que significa "no funciona"? .. por favor .. debes ser más especifico

En el proceso de ver donde está el problema no puedes ir probando código y ver si alguno funciona .. es necesario evaluar -que pasa- .. como? .. simplemente viendo los datos que maneja ese código .. ver si tienen los valores esperados .. en que punto no se cumplen .. en fin .. evaluar y detecatar el problema. Cuando el problema es detectado .. ahí veremos forma de solucionarlo.

Para eso .. ayudate de:

echo $variable;
para ver el valor de tus variables ..

exit;
para aplicar un punto de ruptura al código y no dejar que pase .. .Sobre todo antes de llegar a tu header("location ...") por si hay algú mensaje de error que se esté produciendo pero no ves por qué te redirecciona a otro sítio.

Un saludo,
  #15 (permalink)  
Antiguo 16/12/2005, 08:23
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
como dije arriba transdatos me recibe las variables $txtl y $txtp correctamente pero cuando ejecuta la linea de header(Location:manifprin.php) es com que si no recibiera esos datos y me bota a acceso.php.

Si no me entiendes algo dimelo please
  #16 (permalink)  
Antiguo 16/12/2005, 08:26
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
algo anda mal en manifprin y no se que es solo se qiue es con sesiones ahora en transdatos no se si este manejando bien esas variables yo supongo que como sesiones actua como cookies esas variables se guardan en $txtl y en $txtp lo cual debe leerse en manifprin ,

si no estoy usando bien esas variables: en

session_start();
$txtl=$_SESSION['Xl'];
$txtp=$_SESSION['Xp'];

digame cual es el error o que debor adicionar ;)
  #17 (permalink)  
Antiguo 16/12/2005, 08:28
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
hago lo de header para que el usuario no pueda visualizar la transaccion de los datos osea como que si lo estuviese haciendo invisible ahora habra otra manera de ocultar transdatos?.
  #18 (permalink)  
Antiguo 16/12/2005, 08:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues no te entiendo por mi parte ...

Estás hablando de "transdatos.php"? .. Especifica el código -completo- de como quedó ese escript.

Sólo te puedeo comentar .. que si alguno de tus scripts va aceptar ciertas variables por $_POST de un formulario .. pero también ha de tomar o re-asignar sus variables desde una sesión para usarlos .. Antes de nada tendrías que hacer validaciones tipo:

Código PHP:
if (!empty($_SESSION['alguna_Variable'])){
$variable=$_SESSION['alguna_Variable'];
}else{
$variable=$_POST['alguna_Variable'];


// usas $variable .. el valor que tenga este será el de la sesión si existe en este caso y sino el de POST . 
De esta forma .. tomas como valor pre-ferente a tu sesión o a lo que llegue de tu formulario ..

Creo que por ahí va tu problema .. pero todo esto se vería mejor con TODOS los scripts y su código completo que intervengan en el proceso + una explicación tuya de como funcina el flujo de tus scritps .. por donde empiezas .. quien llama a que script .. que datos se le pasan .. cuales se crean en una sesión .. etc.

Un saludo,
  #19 (permalink)  
Antiguo 16/12/2005, 08:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No, .. no se trata de hacerlo "invisible" sino de lo que estás haciendo. Tu scritp PHP de proceso se ejecuta y cuando termine lo redireccionas a otro sitio ..

Está bien ese procedimiento ..

Un saludo,
  #20 (permalink)  
Antiguo 16/12/2005, 09:20
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
se me ocurrio hacer esto:

<script>
function Cargar(){
document.frm_datos.action="manifprin.php";
document.frm_datos.submit();
}
</script>

<body onLoad="Cargar()">
<form action="manif_report.php" method="post" name="frm_datos">
<input type="hidden" name="txtl" value="<? echo $txtl;?>">
<input type="hidden" name="txtp" value="<? echo $txtp;?>">
</form>

Gracias Cluster ;)

Última edición por lily_cv; 16/12/2005 a las 09:43
  #21 (permalink)  
Antiguo 16/12/2005, 09:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ahora si que no entendí nada ..

Pero lo que si que veo es que estás propagando unas variables por ahí en un formulario .. eso si bien no lo verá un usuario común van a quedar por ahí regadas en historiales de navegadores, proxys etc ...

Un saludo,
  #22 (permalink)  
Antiguo 16/12/2005, 10:02
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
eso no lo hace tb el cookie?, podrias aclararmelo pork no se mucho sobre esto
  #23 (permalink)  
Antiguo 16/12/2005, 10:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Que ha de hacer "el cookie" o no hacer?

Explica tu lo que "entiendes del tema" para corregirte si es necesario ..

Sólo te puede comentar una cosa de momento.

Las cookies permanecen sus datos (todos los que ahí le envies) en el cliente (navegador de tu usuario).

las sesiones .. los datos que ahí almacenes quedan en el servidor. NO viajan los datos al cliente y sólo se ha de propagar el "SID" (Identificador Único de Sesión) para que la sesión siga su curso y se continue usando. Si este "SID" no se propaga, siempre se creará una sesión diferente nunca podrás acceder los datos de la sesión creada desde otros scripts. En las FAQ's de este foro tienes ejemplos de uso y algo de teoría sobre sesiones. Es necesario que la conozcas!.

Por otro lado .. los datos que envias desde un formulario HTML a un script PHP de proceso .. ese "paso" de datos es inevitable .. siempre sucederá y debe suceder para hacerle llegar "datos" a tus scripts PHP desde formularios/links ..etc. Ahora, este "paso" de datos se puede asegurar (encriptado) usando SSL (pero esto es otro tema).

Ahora .. si tu tomas un dato en un script PHP proviniente de un formulario .. como un "usuario" o una "contraseña" y esos datos los vas pasando entre scritps cada vez que usas un formulario .. o pasas a otro script por un link .. eso son los datos que van a ir quedando expuestos, suceptibles de ser modificados constantemente ... además que te obligaría a constantemente verificar esos datos contra tu BD o similar .. no te puedes fiar de esos datos por si son alterados.

Esto no ocurre cuando usas sesiones .. los datos no son accesibles ni modificados por un "usuario" .. por eso "confiamos" en esos datos. Con las cookies sucede algo similar .. los datos pueden ser "alterados" .. no tal fácilmente como si los propagas por el URL simplemente .. pero igualmente son suceptibles de ser alterados .. por eso no es recomendable propagar el cookies datos "sensibles" (un usuario/contraseña .. etc).

Un saludo,
  #24 (permalink)  
Antiguo 16/12/2005, 10:31
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 0
ah yaaa
ya entendi poco a poco ire aprendiendo un poco mas gracias cluster

saludos :)
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 05:32.