Foros del Web » Programando para Internet » PHP »

No veo entiendo este fallo con setcookie

Estas en el tema de No veo entiendo este fallo con setcookie en el foro de PHP en Foros del Web. Bueno a ver si me explico bien, el caso es que tengo un sistema de logeo sencillo con setcookie('idSesion', $hash) para crear un sesion, previamente ...
  #1 (permalink)  
Antiguo 28/08/2009, 07:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
No veo entiendo este fallo con setcookie

Bueno a ver si me explico bien, el caso es que tengo un sistema de logeo sencillo con setcookie('idSesion', $hash) para crear un sesion, previamente a hash le asigno un valor tipo rand y tal, en ciertas paginas necesito el idUsuario para lo cual con una consulta sql lo obtengo, antes de hacer esta consulta cargo el valor del hash en una variable con
$valor=$_COOKIE['idSesion'];

hasta aqui el detalle ahora mi problema va que en ciertas paginas el $valor me almacena un valor que corresponde y el mismo codigo en otras paginas no me va, en otras palabras en valor no hay nada ni siquiera valor basura estando siempre logeado sin salir porque me escaso conocimiento me dices que cuando te logeas y no le das a salir tu cookie deberia tener algun valor siempre aunque vayas cambiando de paginas en la misma web no?, os suena de algo esto agradezco cualquier ayuda o consejo, gracias y saluds
  #2 (permalink)  
Antiguo 28/08/2009, 07:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: No veo entiendo este fallo con setcookie

Habria que ver que has hecho en las paginas que no te sale para indicarte que debes corregir. Te sugiero colocar uno que te funcione y otra que no te funciona
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 28/08/2009, 08:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: No veo entiendo este fallo con setcookie

AQUI FUNCIONA
Código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="" lang="es" xml:lang="es">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   	<!-- <link rel="stylesheet" type="text/css" href="../ejercicio7/ejercicio7_solucion.css" title="style" />  --->
	<title>RCAR</title>
		
	<script type="text/javascript">
		if(typeof $ != 'function') function $(id){return document.getElementById(id);}
		function show(s){$(s).style.display='block'; return false;}
		function hide(h){$(h).style.display='none';  return false;}
	</script>
	
	<link rel="stylesheet" type="text/css" href="estilos.css" media="screen" />
</head>
<body>

<div id="contenido">
	
	<div id="principal">
		
		<div class="articulo">
			<h2> Reservas</h2>
			
		
		
		
		<?php
			
			
			
			function diff_date($date1, $date2){
				if(!is_integer($date1)) {$date1= strtotime($date1); }
				if(!is_integer($date2)) {$date2= strtotime($date2); }
			  return floor(abs($date1- $date2) / 60 / 60 / 24); 
			}
			
			
			
				
		
			if (!($link=mysql_connect("localhost","root"))) {
			die('Error al conectar a la BD'); 
			}

			if (!mysql_select_db("RECAR",$link)) {
			die("Error seleccionando la base de datos.");
			}
			
			
			//TROZO DE CODIGO QUE FUNCIONA EL PROBLEMA EN CUESTIÓN EN LA PAGINA DE ABAJO

			$coo=$_COOKIE['idSesion'];
			$q="Select idUsuario FROM session Where hash='" . $_COOKIE['idSesion'] . "'";
			$rs=mysql_query($q);
            		$raw = mysql_fetch_array($rs);
			$idusu=$raw['idUsuario'];
			echo "<br>Cookie: $coo <br/>";
			echo " Id_Usua: $idusu <br/>";

			//FIN TROZO

							
				
					
				$codc=intval($_REQUEST['id']);
				$idu=$row['idUsuario'];
				$fini=$_REQUEST['fechaEntrega']; 
				$ffin=$_REQUEST['fechaDevolucion']; 
				
				
				if($fini==$ffin) $dias=1;
				else	$dias=diff_date($fini,$ffin)+1;
				 
				 
				 
				 
				 $res="SELECT Alquiler FROM Coche WHERE idCoche='$codc' "; 
				 $q=mysql_query($res);
				 $row = mysql_fetch_array($q);
				 $cos=$row['Alquiler']* $dias;
				
				 $ins="INSERT INTO `Alquilado`(`IdAlquiler`,`Coche_idCoche`,`Usuario_idUsuario`,`Fecha_Inicio`,`Fecha_Fin`,`Coste`) VALUES ('','$codc','$idu','$fini','$ffin','$cos')";
				 
				 //$ins="INSERT INTO `Alquilado`(`IdAlquiler`,`Coche_idCoche`,`Usuario_idUsuario`,`Fecha_Inicio`,`Fecha_Fin`,`Coste`) VALUES ('','$codc','$idu','".dateToMySQL($fini)."','".dateToMySQL($ffin)."','$cos')";
				 //$ins .=" VALUES (,'$codc','$idu','$fini','$ffin','"$row['Alquiler']"');";
				 //echo $ins;
				 
				 $p=mysql_query($ins, $link);
				 
				 if(!$p || (mysql_errno($link) > 0) ) {
						die('Error de la BD');
				}
				echo "RESERVA EFECTUADA";
				
		?>	
		
		<div style="width:100%;clear:both;"></div>
		</div>
	
		</div>
	<!-- /Principal -->
	</div>
	<!-- /Contenido -->
</body>
</html>



AQUI NO FUNCIONA

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "wg/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml" lang="es" xml:lang="es">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   	<!-- <link rel="stylesheet" type="text/css" href="../ejercicio7/ejercicio7_solucion.css" title="style" />  --->
	<title>RCAR</title>
		
	<script type="text/javascript">
		if(typeof $ != 'function') function $(id){return document.getElementById(id);}
		function show(s){$(s).style.display='block'; return false;}
		function hide(h){$(h).style.display='none';  return false;}
	</script>
	
	<link rel="stylesheet" type="text/css" href="estilos.css" media="screen" />
</head>
<body>

<div id="contenido">
	
	<div id="principal">
		
		<div class="articulo">
			<h2>Zona Administrador</h2>
			<h2>Venta</h2>
			
		
		
		
		<?php
			
			//CONECTANDO A LA BASE DE DATOS		
		
			if (!($link=mysql_connect("localhost","root"))) {
			die('Error al conectar a la BD');
			}

			if (!mysql_select_db("RECAR",$link)) {
			die("Error seleccionando la base de datos.");

			}
			
			//TROZO DE CODIGO QUE NO FUNCIONA EL DICHOSO PROBLEMA

			$coo=$_COOKIE['idSesion'];
			$q="Select idUsuario FROM session Where hash='" . $_COOKIE['idSesion'] . "'";
			$rs=mysql_query($q);
            		$raw = mysql_fetch_array($rs);
			$idusu=$raw['idUsuario'];
			echo "<br>Cookie: $coo <br/>";
			echo " Id_Usua: $idusu <br/>";

			//FIN TROZO




			$q=" SELECT * FROM Venta";
			$result=mysql_query($q,$link);
			
			echo "<table>\n";
					
					echo "<tr><th>Marca</th><th>Año</th><th>Motor</th><th></th><th>Precio</th><th>Contacto</th><th>Imagen</th></tr>";
					
					while($row = mysql_fetch_assoc($result)) {
						//if(($row[idUsuario]==NULL) || ($row[idUsuario]==0)){ //SI EL COCHE NO ESTA VENDIDO
						//echo "<tr><td>{$row['idCoche']}</td><td>{$row['Marca']}</td>\t\t<td>{$row['Plazas']}</td></tr>";
						echo "<tr><td>{$row['Marca']}</td><td>{$row['Anio']}</td><td>{$row['Motor']}</td><td></td><td>{$row['Precio']}</td><td>{$row['Contacto']}</td><td><img src='../../{$row['Imagen']}' alt='modificar' width=\"70px\" height=\"60px\"/></td>";
						        echo "<td><a href='Admin_venta_procesa.phtml?id={$row['idVenta']}&amp;tipo=1'>"; 
								echo "<img src='/alquiler/recursos/img/iconos/eliminar.jpg' alt='eliminar' width=\"40px\" height=\"40px\" /></a></td> <td><a href='Admin_venta_procesa.phtml?id={$row['idVenta']}&amp;tipo=2'><img src='../../recursos/img/iconos/modificar.jpg' alt='modificar' /></a></td>";
								if(($row['idUsuario']!= 0)) echo "<td><a href='Admin_venta_procesa.phtml?id={$row['idVenta']}&amp;tipo=3' >Reservado</a></td>";
						
						echo	"</tr>";		

						//}   ($row['idUsuario']!=NULL) || 
							
					}
					
					/*while ($line = mysql_fetch_row($result)) {
						echo "\t<tr>\n";
						foreach ($line as $col_value) {
							echo "\t\t<td>$col_value</td>\n";
						}
						echo "\t</tr>\n";
					}*/
					echo "</table>\n";
					echo "<td><a href='Admin_venta_procesa.phtml?id=0'><img src='/alquiler/recursos/img/iconos/insertar.jpg' alt='insertar' width='50px' height='50px' /></a></td>";
			  mysql_free_result($result);
			  ?>	
			
			<div style="width:100%;clear:both;"></div>
		</div>
	
	
			
		
		<div class="articulo">
			
								
			
			<div style="width:100%;clear:both;"></div>
		</div>
	
		
	</div>
	<!-- /Principal -->
	
	
	</div>
	<!-- /Contenido -->
	
   

</body>
</html>
SI veis que hay cosas que no cuadra en el codigo a parte del trozo que señalo es cuestion de copiar y pegar, vamos que lo demas me va bien mas alla que pueda ser codigo que puede ser mejorado
  #4 (permalink)  
Antiguo 28/08/2009, 08:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: No veo entiendo este fallo con setcookie

No veo algun error en el codigo. ¿Donde declaraste por primera vez el cookie y como lo declaraste? Te sugiero que escribas cual es la estructura de tus directorios y archivos. Por lo menos mencionando donde se encuentra cada uno. Mira este post que estaban trabajando entre ayer y hoy y como lo resolvio la persona http://www.forosdelweb.com/f18/probl...3/#post3062068 Si es posible ingresa el cuarto parametro como lo indico esa persona "/"
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 28/08/2009, 10:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: No veo entiendo este fallo con setcookie

Soy muy novato en esto así que ando mas bien perdido, estoy aprendiendo todo sobre la marcha según me voy tropezando con problemas, desde un FORM envio datos a otro fichero.php que trata los datos aqui es donde luego de comprobar que exista dicho usuario hago el siguiente codigo:

Código PHP:
<?
                               $row  
mysql_fetch_assoc($s);
                
$hash md5(microtime(true) * rand());
                
                
$q  "INSERT INTO `session` ";
                
$q .= "(`hash`,`ts`,`idUsuario`) VALUES ";
                
$q .= "('%s',UNIX_TIMESTAMP(),'%d');";
                
                
$q sprintf($q$hash$row['idUsuario']);
                
                
mysql_query($q,$link);                
                
                if(
mysql_errno() > 0) {
                    echo 
mysql_error();
                    die(
'Error creando sesi&oacute;n');
                }
                
                 
setcookie('idSesion'$hash); 
?>
me supongo que a eso te refieres cuando dices donde declaras por primera vez el cookie, es que como te dije como llevo poco días con esto hasta el tema de setcookie todavía lo manejo con cierta inseguridad de como va.
  #6 (permalink)  
Antiguo 28/08/2009, 10:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: No veo entiendo este fallo con setcookie

bien, creo que es claro...

por favor, lee el manual
http://php.net/setcookie

ya que la cookie que creas caduca inmediatamente... o sea, solo en la sesión...

debes especificar un tercer parámetro que indique la caducidad...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 28/08/2009, 10:44
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: No veo entiendo este fallo con setcookie

Vale entiendo lo que dices, ahora si caduca enseguida como es que me permite seguir navegando por las distintas paginas de la web como logeado(permite opciones privadas) durante todo el tiempo que quiera hasta que no le dee a salir el problemas esta en algunas paginas que si recoge el cookie del navegador y de otras no, que dicho sea de paso tengo otro problema con el cookie que primero quiero solucionar esto para luego preguntar lo otro.
  #8 (permalink)  
Antiguo 28/08/2009, 14:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: No veo entiendo este fallo con setcookie

¿Como tienes declarado en el php.ini el session.cookie_lifetime? Pero como quiera te falta declarar el cuarto parametro, lee el documento que te indico pateketrueke para que puedas escribir el cuarto parametro o lee el link que te indique para sepas a lo que me refiero.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 30/08/2009, 09:24
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: No veo entiendo este fallo con setcookie

Ehh no tengo ningun php.ini asi que no declare nada, lo que basicamente tengo echo fue de una sencilla pero muy basica explicacion de setcookie de internet asi que no tengo mucha idea, por cierto lei php.net/setcookie pero al estar en ingles no me entere mucho, lo curioso es que este problema paso al estructurar la web en carpetas(todos los códigos) ya que antes funcionaba, el el otro problema parecido que tengo es que en mi index.php tengo este código "if(isset($_COOKIE['idSesion'])) .... else ...." que valido si existe o no el cookie(si hay usuario registrado) el caso es que aqui aunque exista o no el cookie hace siempre el código del else se salta el IF, otro gran misterio.
  #10 (permalink)  
Antiguo 30/08/2009, 13:14
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 11 meses
Puntos: 21
Respuesta: No veo entiendo este fallo con setcookie

claro, yo tengo windows sin la carpeta windows, es muy logico... es obvio que tenes php.ini que no lo puedas ver porque no tenes los permisos necesarios es otra cosa, tenes que pedirle al soporte del hosting que lo modifique.
  #11 (permalink)  
Antiguo 30/08/2009, 14:09
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: No veo entiendo este fallo con setcookie

bueno por fin he dado con la solucion, y no lo solucione antes sencillamente porque mi ingles es muy malo no hay mas excusas y me costo un poco entender, total mi problema lo solucione mirando php.net/setcookie y forosdelweb.com/f18/probl...3/#post3062068 el primer enlace para entender de que se hablaba en el segundo ya que iba por ahi mi problema, asi que muchas gracias a todos por sus consejos en especial a pateketrueke y abimaelrc que me dieron lo necesario para solucionar esto!! bioxido trabajo en localhost y sin animo de ofender supongo que no has leído mi ultima respuesta donde digo que no tengo mucha idea estoy intentando aprender con mas o menos rapidez así que lo que "para ti es lógico" porque seguro que entiendes de esto para los que no tienen tus conocimientos, pues comprenderás que "no lo es" como mi caso, así que por mi humilde consejo no supongas que todo el mundo nació con las lecciones aprendidas como tu, yo no tuve tu suerte, pero de todos modos gracias por tu comentario, doy por terminado el tema.
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 22:45.