Foros del Web » Programando para Internet » PHP »

que cantidad de variables uso con Session?

Estas en el tema de que cantidad de variables uso con Session? en el foro de PHP en Foros del Web. Mi duda es la siguiente, quiero que los usuarios de mi web, una vez que se logean pueden acceder a un sector en donde puedan, ...
  #1 (permalink)  
Antiguo 18/10/2004, 18:53
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
que cantidad de variables uso con Session?

Mi duda es la siguiente, quiero que los usuarios de mi web, una vez que se logean pueden acceder a un sector en donde puedan, si asi lo desean, modificar sus datos, para lograr eso el procedimiento que habia pensado, era en el script que verifica el nombre y usuario, una vez que comprueba que los datos de ingreso son correctos (los mismos estan cargados en una BD junto con otra informacion adicional, en total 7 campos),guardar en variables de session ($_session["nombredecampo"]) todos los datos que extraigo de la base de datos (como dije antes 7) para luego ir a un formulario y poder cargar esas variables a cada campo del formulario y asi el usuario modificar los datos.
Ahora pregunto, es este procedimiento que pienso utilizar logico o me estoy complicando demasiado en la manera que pienso hacerlo?
Haciendo las primeras pruebas me aparece un error, algo asi como que las variables de session superan el limite, hay un limite para asignar variables???
de ser asi de cuanto es ??? esta asignado en el phpini????
y por ultimo como hago para que en un formulario me aparezca el valor previo de un campo , antes de poder modificarlo ???
Espero haber sido claro.
Desde ya les agradezco en lo que me pueden ayudar.
  #2 (permalink)  
Antiguo 18/10/2004, 20:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si no nos pones el mensaje de error exacto que obtienes y el código que usas .. poco podemos ver sobre lo que sucede y en consecuencia dar una solución.

Que yo sepa no hay limite en el numero o bytes que ocupan tus sesiones .. tan sólo lo que el HD de ese servidor dé.

El tema de propagar tus variables de tus formularios en una sesión por si hay errores volver al formulario con esas variables en el "pre-cargadas" no es está nada mal, de hecho .. todas esas variables que guardas en tu sesión las ahorras en el URL en su propagación y ... fijate que todo lo que pasas por el URL entre "cliente-servidor" es un consumo de tu "tasa de transferencia mensual" que tu proveedor de hosting te ofrece (o tu ISP). Además de la seguridad que ganas al no poder el "cliente" modificar/alterar esas variables modificando el URL o similares pues, estas variables de sesión nunca viajan al cliente ..

Un saludo,
  #3 (permalink)  
Antiguo 19/10/2004, 09:06
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Te paso el codigo y el mensaje de error que me aparece.
-En la pagina que me verifica al usuario (control.php)
<?
//paso las variables
$usuario=$_POST["usuario"];
$contrasena=$_POST["contrasena"];
//conecto con la base de datos
$conn = mysql_connect("localhost","usuario","clave");
$base = "nombre_b";
$tabla = "Tabla";
//selecciono la BBDD
mysql_select_db($base,$conn);
//Sentencia SQL para buscar un usuario con esos datos
$ssql = "SELECT * FROM $tabla WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'and autorizado='si'";
//Ejecuto la sentencia
$rs = mysql_query($ssql,$conn);
//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa conbinación usuario/contraseña
if (mysql_num_rows($rs)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
$row = mysql_fetch_array($rs);
session_start();
$_SESSION["autentificado"]="SI";
$_SESSION["apellido"]=$row["apellido"];
$_SESSION["usuario"]=$row["nombre_usuario"];
$_SESSION["contrasena"]=$row["clave_usuario"];
$_SESSION["nombre"]=$row["nombre"];
$_SESSION["telefono"]=$row["telefono"];
$_SESSION["celular"]=$row["celular"];
$_SESSION["email"]=$row["email"];
header ("Location: mostrarregistro.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: ingreso.php?errorusuario=si");
}
mysql_free_result($rs);
mysql_close($conn);
?>
ahora en mostrarregistros.php el codigo es:
<?
//Inicio session
session_start();
?>
<form name="form1" method="post" action="">
<table width="800" height="287" border="0" align="center" cellpadding="0" cellspacing="3">
<tr>
<td width="199"><div align="right">Apellido:</div></td>
<td width="207"><input type='$_SESSION["apellido"]' name="textfield1"></td>
<td width="104">&nbsp;</td>
</tr>
<tr>
<td><div align="right">Nombre:</div></td>
<td><input type="text" name='$_SESSION["nombre"]'td>
<td><div align="center">
<input type="submit" name="Submit" value="Grabar cambios">
</div></td>
<td><div align="center">
<input type="submit" name="Submit2" value="Salir sin cambios">
</div></td>

El error que me aparece es
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\my documents\miswebs\mostrarregistro.php:7) in c:\my documents\miswebs\mostrarregistro.php on line 9

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\my documents\miswebs\mostrarregistro.php:7) in c:\my documents\miswebs\mostrarregistro.php on line 9

La linea 9 es session_start().

estoy seguro que lo de mostrar las variables en el form, no esta correcto, me podrias orientar y solucionarlo??
Gracias
  #4 (permalink)  
Antiguo 19/10/2004, 09:43
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
comprueba que no tengas algúna línea en blanco al principio del script mostrarregistro.php.

Este código pegalo arriba del todo de la página:
<?
//Inicio session
session_start();
?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #5 (permalink)  
Antiguo 19/10/2004, 09:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Concretamente .. el error te dice que en la línea 7 de mostrarregistro.php tienes algo de HTML ahí .. o un salto de línea antes de <? .. o espacios ..

Verificalo y nos comentas.

Un saludo,
  #6 (permalink)  
Antiguo 19/10/2004, 09:59
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias , tenian razon problema solucionado, ahora lo que no logro es insertar en el formulario la variable
Ya no me da error pero me aparece el formulario vacio, la variable de session
donde la tengo que tomar ??
en input type=$_session[varible], ??
lo sigvuiente es lo que estoy haciendo y no me funciona.

<?
//Inicio session
session_start();
?><html>
<form name="form1" method="post" action="">
<table width="800" height="287" border="0" align="center" cellpadding="0" cellspacing="3">
<tr>
<td width="199"><div align="right">apellido:</div></td>
<td width="207"><input type='$_SESSION["apellido"]' name="textfield1"></td>
<td><div align="center">
<input type="submit" name="Submit" value="Grabar cambios">
</div></td>
<td><div align="center">
<input type="submit" name="Submit2" value="Salir sin cambios">
</div></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Gracias
  #7 (permalink)  
Antiguo 19/10/2004, 10:02
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
<input type='<?=$_SESSION["apellido"]?>' name="textfield1">

Así muestras el contenido de la variable <?=$variable?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #8 (permalink)  
Antiguo 19/10/2004, 10:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por si lo desconocen ..

<?=$variable ?> .. es la forma corta de <? echo $variable ?>

Lo importante es "mostrar" esa variable .. y no olvidarse que ese formulario tendrá que ser .php (no .html a no ser que los .html sean "parseados" por PHP .. lo cual no suele ser común).

Por lo demás .. estaría bueno respetar la sintax de HTML... sin hay comillas dobles .. usalas

<input type="<?=$_SESSION["apellido"]?>" name="textfield1">


Un saludo,
  #9 (permalink)  
Antiguo 19/10/2004, 15:43
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Que estoy haciendo mal !!??
Modifique la sintax que tenia mal y me sigue apareciendo en blanco !!, para verificar que la variable contenia un valor realize un "echo" de la misma y me da Bien !! les mando el codigo a ver si me pueden dar una mano y ver donde esta el error.
<?
//Inicio session
session_start();
echo $_SESSION["apellido"];
?>
<html>
<head>
<title>Mostrar Datos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#999999">
<form name="form1" method="post" action="">
<table width="800" height="242" border="0" align="center" cellpadding="0" cellspacing="3">
<tr>
<td width="199" height="146">
<div align="right">apellido</div></td>
<td width="207"><input type="<?=$_SESSION["apellido"]?>"name="textfield1"></td>
<td width="104">&nbsp;</td>
</tr>
<tr>
<td height="87">
<div align="center">
<input type="submit" name="Submit" value="Grabar cambios">
</div></td>
<td><div align="center">
<input type="submit" name="Submit2" value="Salir sin cambios">
</div></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Aprovecho para preguntarles otra inquitud, las variables de session, tienen un tiempo en el servidor ???, si no las borro, que pasa ??
desde ya Gracias
  #10 (permalink)  
Antiguo 19/10/2004, 15:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. .

donde haces algo tipó:

$_SESSION['mombre']=$_POST['textfield1']; // deberías usar un nombre de tu input formulario HTML más claro!.

Es decir .. donde asignas las variables de tu formulario a las correspondientes variables de sesión ..?

En tu código original .. haces una consulta a tu BD y obtienes un montón de variables (campos) que asignas a una sesión .. pero realmente los que necesitas son los datos que ingresaron desde tu formulario (que están en el array $_POST, pues ese es el método que usas .. )

Un saludo,

Última edición por Cluster; 19/10/2004 a las 15:58
  #11 (permalink)  
Antiguo 19/10/2004, 17:39
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
A ver si puedo ser mas claro en lo que quiero hacer
En principio tengo un fomulario (ingreso.html) en donde ingreso "usuario y contrasena", las variables ingresadas los tomo y las verifico (control.php) ahi lo que hago es conectarme a una BD y verificar si la combinacion usuario-contrasena es correcta !! en ese momento aprovecho y tomo el resto de los datos del usuario (nombre, apellido, email, etc,) que estan en la BD asignandole variables de session ( Ej. $_session["nombre"]=$row["nombre"]) y asi con el resto de los datos manteniendo en cada caso el nombre del campo asignado, luego redirecciono la pagina a la de inicio del sector restrigido, a medida que el usuario va navegando voy utilizando las variables de session que voy necesitando, hasta aqui te comento todo funciona a la perfeccion, mi problema surge cuando quiero que el usuario tenga la posibilidad de poder modificar los datos que ingreso, por eso veras que en el codigo de "mostrarregistros.php" inicio una seccion y utilizo una de esa variables (en realidad necesito todas pero por ahora pruebo con una hasta que me funcione), como te comentaba en el post anterior si realizo un "echo" de cualquier variable me la muestra sin problemas, pero no puedo lograr que me llene el campo del form que quiero utilizar para que se pueda modificar los datos.
Hice las modificaciones que me sugeriste y sigo con el problema.
Algo mas que me puedas sugerir o el metodo que pretendo quizas no sea el mas conveniente ??
Otra forma seria mostrar mediante un script los datos y luego armar un form con los campos vacios que solo llenara el usuario cuando quiera hacer una modificacion?
Que te parece ??
  #12 (permalink)  
Antiguo 19/10/2004, 18:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, .. ahora parece que lo entendí .. (o eso creo).

Tanto en la explicaciòn de Livin como en la mia (que copiè sin mirar mucho el código) hay un gran error:

El valor por defecto de un input de HTML se coloca bajo la propiedad "value" .. no en Type ...

Código PHP:
<input type="text" name="nombre" value="<? echo $_SESSION['nombre'?>">
(esto lo escribí antes .. pero ahí queda el comentario):

Si en función de una variable de sesión que has definido (con su valor) en algún otro script (momento) .. lo usas para hacer una consulta a tu BD para poder presentar un formulario con esos datos pre-cargados en ella ... ¿para que necesitas almacenar esos datos en una sesión? .. En parte .. te ahorras una conexión a tu BD y consulta consiguiente a la misma .. Pero, también arrastras en la sesión (que igual consume recurso de acceso/interpretación de esos datos por parte del servidor) en cada página/script que mueves en el servidor (que solicitas) que use sesiones (todas en tu caso: donde uses session_start())

Personalmente no hago eso, sólo con el nombre de ese usuario o mejor del ID de ese registro (para acelerar consultas SQL posteriores) es lo que propagaría en la sesión .. junto con algún otro dato realmente relavente y que siempre se use en todos los scripts. La opción de "editar" los datos de ese cliente lo haría haciendo una consulta SQL a ese usuario en el script "mostrarregistros.php" del tipo:

SELECT * FROM usuarios WHERE id=$_SESSION['id'] .. suponiendo que en tu sesión guardes el ID del usuario que está autentificado en tu sesión actual.

Ahí obtengo los campos pertinentes $row['nombre'], etc . .y los uso en los value de los input:

<input type="text" name="nombre" value="<? echo $row['nombre'] ?>">

Un saludo
  #13 (permalink)  
Antiguo 20/10/2004, 09:56
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias Cluster, te comento que habia detectado el error que estabamos cometiento. (el de "value" en lugar del "input_type"), no llegue mandarte el post antes.
El resto voy a probar tu suferencia y depues te cuento.
Desde ya 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 10:16.