Foros del Web » Programando para Internet » PHP »

ayuda con cookies

Estas en el tema de ayuda con cookies en el foro de PHP en Foros del Web. hola, intento crear cookies con el usuario y password de quien haga login y que dure una semana....pero no se como hacerlo, con las sesiones ...
  #1 (permalink)  
Antiguo 02/02/2004, 22:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Busqueda ayuda con cookies

hola, intento crear cookies con el usuario y password de quien haga login y que dure una semana....pero no se como hacerlo, con las sesiones des que el usuario cierra el navegador se pierden las variables.....o al menos eso creo. Imaginemos que paso de un formulario las variables $user y $pass....como hago para que esas variables se guarden por una semana o mas, ya sea con cookies o con sesiones.....

Gracias.
  #2 (permalink)  
Antiguo 02/02/2004, 22:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa la documentación oficial de PHP:

setcookie()
www.php.net/setcookie

Ahí tienes el 3er parámetro que indica (si no me equivoco) el tiempo en segundos que va a durar tu cookie ... tomando como inicio ahora mismo en formato TIMESTAM (time()+segundos ..)

En las FAQ's de este foro PHP también hay ejemplos ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 03/02/2004, 09:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
ya he leido eso antes y no me funcionan las cookies.... me funcionan si el valor de la cookie es un numero, pero si es una cadena no me funciona.....y tambien tengo problemas con los headers, pero ya se que hacer, solo necesito un ejemplo.....
  #4 (permalink)  
Antiguo 03/02/2004, 10:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pon el código que usas para definir una cookie y como pretendes leerla .. Los ejemplos son los que la documentación describe y en las FAQ's como te comenté tienes ..

Si obtienes errores con las cabeceras (header()) deberías indicar el error textual junto con el código que lo proboca (y si corresponde indicar las líneas que marca el error ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 03/02/2004, 10:18
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
aqui le va todo.....

Pagina:
Código PHP:
if(!isset($login) AND !isset($password)){
......
formulario......
}else{
$pass2 md5($pass);
$res "select * from admins where (nombre = '$login' AND pass = '$pass2')";
$res mysql_query($res);
$num mysql_num_rows($res);
if(
$num>0){
.......
lapagina...........
}else{
echo 
"error....";
}
// Sesiones
session_cache_limiter('nocache,private');
session_name('sesion');
session_start();
session_register('login');
session_register('pass');

me sale

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/gameland/public_html/php../funciones.php:6) in /home/gameland/public_html/php../secciones/admin.php on line 86

y que hay en funciones.php en la linea 6:
Código PHP:
function logo() { 
echo 
"<center><img border=\"0\" src=\"images/logo3.jpg\" width=\"100%\" height=\"187\"></center>";

que esta pasando??? como hago una cookie de un mes???
  #6 (permalink)  
Antiguo 03/02/2004, 10:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero.. lo que estás es usando SESIONES .. no COOKIES!!!!!!!

NI en sesiones ni en cookies se puede enivar nada de HTML al navegador (ni un espacio .. o salto de línea) antes de tu inicialización (session_start() para el caso de sesiones y setcookie() para cookies) ..

Si pusieras el código completo de tu página con las llamadas a otros archivos que haces (como ese "funciones.php") se vería como ordenar el código para no provocar esa salida HTML al navegador en ese punto .. Recuerda que PHP se ejecuta en el servidor .. procesa y lo que resulte es entregado al navegador (cliente) .. Cuando tu defines una cookie o sesión .. la "decisión" de que es lo que vas a crear en una cookie o sesión se hace en "PHP" (en el servidor), en ese momento NO pinta nada todo HTML que envies.

Solventa el problema de las sesiones si quieres y luego el de las cookies .. Pero para el tema de las cookies, por favor leete antes la documentación y pon los ejemplos que intentes hacer y no te funcionen con su código de error que pueda darte PHP.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 03/02/2004, 11:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
index:
Código PHP:
include("funciones.php");
include(
"configuracion.php"); 

//verifico el modulo
if (!empty($_GET['sec'])) {
    
$modulo $_GET['sec']; 
}else{
    
$modulo seccion_pre
    }

if (empty(
$seccion[$modulo])) {
        
$modulo error
        }

if (empty(
$seccion[$modulo]['layout'])) 
        
$seccion[$modulo]['layout'] = diseno_pre

//incluyo el layout que es HTML y PHP juntos, el modulo es PHP y HTML también.....        
    
if(file_exists("$path_layout")){
        include(
"$path_layout");
    }...........
//no quiero poner mucha informacion :) por si acaso.... 
el modulo correspondiente es el admin que ya lo puse arriba:

Código PHP:
if(!isset($login) AND !isset($password)){
......
formulario......
}else{
$pass2 md5($pass);
$res "select * from admins where (nombre = '$login' AND pass = '$pass2')";
$res mysql_query($res);
$num mysql_num_rows($res);
if(
$num>0){
.......
lapagina...........
}else{
echo 
"error....";
}
// Sesiones
session_cache_limiter('nocache,private');
session_name('sesion');
session_start();
session_register('login');
session_register('pass');

  #8 (permalink)  
Antiguo 03/02/2004, 12:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/gameland/public_html/php../funciones.php:6) in /home/gameland/public_html/php../secciones/admin.php on line 86
Fijate en el error .. fijate donde nombra los archivos implicados ..

Sigue sin verse (por qué no se vé el código de esos include() que usas) donde usas HTML o salida al navegador .. De todas formas el error dice que en la línea 6 de funciones tienes un espacio, salto de línea o HTML en general .. (posiblemente despues de un ?> o antes de <? si fuera espacios o saltos de línea).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 03/02/2004, 20:15
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
es que.... en la linea 6 hay esto:
Código PHP:
function logo() { 
echo 
"<center><img border=\"0\" src=\"images/logo3.jpg\" width=\"100%\" height=\"187\"></center>";

??? solo con ese echo ya es un header??
  #10 (permalink)  
Antiguo 03/02/2004, 20:58
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Justamente, la idea es poder acomodar el código de tal manera que no haya esas salidas antes de enviar las cabeceras. Y no tener que recurrir al uso de funciones como ob_start(), etc...

Tómalo como un reto... acá te podmos ayudar si quieres... pero sería bueno que por lo menos hagas el intento.

Saludos
  #11 (permalink)  
Antiguo 03/02/2004, 21:00
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
lo voy a intentar y les aviso lo que he logrado...gracias....
  #12 (permalink)  
Antiguo 03/02/2004, 21:31
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
no me funciona que hay de malo en el codigo.....
Código PHP:
<?php
$user 
"WebMare";
$pass "gml";
setcookie ("cookie[user]"$usertime () + 20);
setcookie ("cookie[pass]"$passtime () + 20);
?>
<html>
<head>
<title>Test Cookies</title>

</head>
<h1>Mi pagina Web. </h1>

<?php
echo $cookie[user];
echo 
" - ";
echo 
$cookie[pass];
?>
</body>
</html>
????
  #13 (permalink)  
Antiguo 03/02/2004, 22:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
creo que encontré porque no me funcionan las cookies.....
encontré este comentario....

If the timezone, or time for that matter on the server that php is on is not set properly, IE 6 for some reason will care about that and not set the cookie. Just something to look out for.


y intente setear la cookie sin ponerle el tiempo y funcionó....que hago para que funcione con el tiempo....según el comentario es cuando el php no esta configurado correctamente que debo cambiar para que me funcione el tiempo...??
  #14 (permalink)  
Antiguo 04/02/2004, 08:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
bueno .. esto no es correcto:

<?php
echo $cookie[user];
echo " - ";
echo $cookie[pass];
?>

sería:

<?php
echo $_COOKIE['user'];
echo " - ";
echo $_COOKIE['pass'];
?>

Y tampoco es correto que .. definas una cookie en una misma página (flujo de código) y lo pretendas leer en esa misma página .. Las cookies (y sesiones) quedarán disponiebles en la próxima petición al servidor:

ejemplo:
pagina1_crea_cookie.php .. -> pagina2_lee_cookie.php .. pero no todo en la que lo crea y si está en la misma página .. hay que crear la cookie y redireccionar a la misma página para que queden disponibles ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 04/02/2004, 15:14
 
Fecha de Ingreso: diciembre-2003
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
ya me estoy cansando.....y quiero preguntar si hay alguna manera de conservar dos variables por un mes....porque parece que no funciona la configuracion del php esta mal o algo asi porque noa guanto mas....como dije antes solo me funciona sin el parámetro time....desde que pongo el time pasa algo.... no entiendo...
  #16 (permalink)  
Antiguo 04/02/2004, 16:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No te canses .. sólo te recomiendo una vez más que hagas los ejemplos del manual oficial de PHP .. Y asegurate de que tu navegador acepte cookeis.

El tiempo se define en segundos .. 20 es lo que indicas .. y eso son 20 segundos .. obten los segundos de 2 meses y aplicalo ahí ..

crea_cookie.php
Código PHP:
<?php
$user 
"WebMare";
$pass "gml";
setcookie ("user"$usertime () + 20);
setcookie ("pass"$passtime () + 20);
// Definidas las cookies ..saltamos a la página que lo leerá .. antes no estarán disponibles dichas variabels en la cookie.
header ("Location: lee_cookie.php");
?>
lee_cookie.php
Código PHP:
<?php
echo $_COOKIE['user'];
echo 
" - ";
echo 
$_COOKIE['pass'];
?>
OJO: El uso de los arrays superglobales $_COOKIE sólo es válido desde PHP versión 4.1.0 en adelante.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/02/2004 a las 16:30
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 23:12.