Foros del Web » Programando para Internet » PHP »

Problema con sesiones de PHP

Estas en el tema de Problema con sesiones de PHP en el foro de PHP en Foros del Web. Hola, soy nuevo en el foro y nuevo programando en PHP. Bueno, realmente debería tener algo de idea porque en mi módulo es una de ...
  #1 (permalink)  
Antiguo 16/01/2013, 12:27
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 3 meses
Puntos: 0
Exclamación Problema con sesiones de PHP

Hola, soy nuevo en el foro y nuevo programando en PHP. Bueno, realmente debería tener algo de idea porque en mi módulo es una de las asignaturas pero mi profesora de PHP es el primer año que nos la da y no tiene demasiada soltura explicando ni resolviendo dudas.

Vereis, en mi macbook habilité el módulo de PHP y todo me iba realmente bien hasta que empezamos con las sesiones que he empezado a notar que los códigos no me van del todo bien.

Ahora en concreto tengo un problema y es que el siguiente código no me funciona como debería. Estoy seguro de que está bien y debería funcionar porque lo he probado en mi Windows y funciona a las mil maravillas pero estoy convencido de que algún parámetro de configuración del php.ini no está como debería para hacerlo funcionar correctamente.
Al ejecutar el código siempre me salen las visitas a 0, no sube el contador por mucho que recargue la página.

A ver si alguno me pudiese ayudar. Muchas gracias de antemano.

Código:
<?php
session_start();
?>
<html>
<head>
<title>Contador de visitas</title>
</head>

<body>
	<?php
		if($_SESSION['contador'] != 0){
				$_SESSION['contador'] = $_SESSION['contador']+1;
			}
		else{
				$_SESSION['contador'] = 0;
			}
		
		echo"Esta es su visita numero: ".$_SESSION['contador']." a esta pagina.";
		echo "<br>";
		echo"<a href='Ejercicio Contador.php'>Mira como sube el contador al pulsar aqui</a>";
	?>
    
</body>
</html>
  #2 (permalink)  
Antiguo 16/01/2013, 12:31
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Primero se debe comprobar si la sesión ha sido definida:

en vez de:

Código PHP:
Ver original
  1. if($_SESSION['contador'] != 0){

usas la función isset para comprobarlo:

Código PHP:
Ver original
  1. if(isset($_SESSION['contador'])) {

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 16/01/2013, 12:36
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con sesiones de PHP

Mil gracias. ¡Ya funciona a la perfección!
  #4 (permalink)  
Antiguo 16/01/2013, 14:18
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con sesiones de PHP

si quieres añadir un poco de seguridad a esa entrada de datos

if(isset($_SESSION['contador']) and int($_SESSION['contador']) and $_SESSION['contador'] >0)

aparte de comprobar que existe el dato isset($_SESSION['contador'])
comprobamos que el tipo de datos es de tipo integer int($_SESSION['contador'])
y por ultimo comprobamos si es mayor a cero $_SESSION['contador'] >0

ademas cuando se muestra el dato deberias de escaparlo aun que haya sido comprobado que el dato es un integer .
  #5 (permalink)  
Antiguo 16/01/2013, 16:24
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por webankenovi Ver Mensaje
comprobamos que el tipo de datos es de tipo integer int($_SESSION['contador'])
No conozco la función int
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 16/01/2013, 16:26
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por andresdzphp Ver Mensaje
No conozco la función int
jejeje se me paso

is_int($_SESSION['contador'])
  #7 (permalink)  
Antiguo 16/01/2013, 17:17
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por webankenovi Ver Mensaje
si quieres añadir un poco de seguridad a esa entrada de datos

if(isset($_SESSION['contador']) and int($_SESSION['contador']) and $_SESSION['contador'] >0)
No sé dónde está la "entrada de datos", ni qué seguridad aporta la llamada a is_int.
Corrijo : no hay entrada de datos, por lo que no aporta ninguna seguridad llamar a is_int.


Y, tampoco se ha despejado la duda de por qué en Windows funciona, y qué cosas del php.ini pueden estar afectando.
En un array asociativo, acceder a claves no inicializadas , dependiendo de la version de PHP que tengas, y de lo que tengas en error_reporting, pueden pasarte cosas diferentes.
No es que la sesion "no esté definida".Sino que esa clave del array asociativo $_SESSION no ha sido definida.
  #8 (permalink)  
Antiguo 16/01/2013, 17:24
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por dashtrash Ver Mensaje
No sé dónde está la "entrada de datos", ni qué seguridad aporta la llamada a is_int.
Corrijo : no hay entrada de datos, por lo que no aporta ninguna seguridad llamar a is_int.
y si se produce un robo de session/cookie y se modifica dicha session/cookie y en vez de un numero se modifica con otros parametros , ahora te pregunto no hay entrada de datos? no se lo mismo me equivoco.
  #9 (permalink)  
Antiguo 16/01/2013, 17:29
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por dashtrash Ver Mensaje
Y, tampoco se ha despejado la duda de por qué en Windows funciona, y qué cosas del php.ini pueden estar afectando.
En un array asociativo, acceder a claves no inicializadas , dependiendo de la version de PHP que tengas, y de lo que tengas en error_reporting, pueden pasarte cosas diferentes.
No es que la sesion "no esté definida".Sino que esa clave del array asociativo $_SESSION no ha sido definida.
Pues ve a buscar al php.ini la solución de algo tan básico, y no pienso confundir a un "estudiante" con tus arrays blablabla. En windows funciona porque está definida, al probarlo en otro lado, no lo está y por lo tanto esa condición no funciona.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 16/01/2013, 17:38
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con sesiones de PHP

ademas por lo que yo se los datos de entrada del servidor tambien hay que validarlos ya que pueden ser modificados, si esto es asi se considera que si hay entrada de datos por lo que is_int() si aportaria seguridad , si estoy equivocado en esto indicarmelo

no soy muy tecnico la verdad me explico lo mejor que puedo y se.
  #11 (permalink)  
Antiguo 16/01/2013, 17:41
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Si se produce un robo de sesion, el último de tus problemas es que se modifique una variable...
Explícame cómo , si te roban una sesión, puedes modificar variables que están almacenadas en un fichero / base de datos del servidor..
Se está hablando de sesiones, no de cookies.En una cookie el usuario puede meter lo que le de la gana, y sí es una entrada de datos.La sesión, no.
  #12 (permalink)  
Antiguo 16/01/2013, 17:44
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por webankenovi Ver Mensaje
ademas por lo que yo se los datos de entrada del servidor tambien hay que validarlos ya que pueden ser modificados, si esto es asi se considera que si hay entrada de datos por lo que is_int() si aportaria seguridad , si estoy equivocado en esto indicarmelo

no soy muy tecnico la verdad me explico lo mejor que puedo y se.
Una sesión es un sistema de persistencia por el lado del servidor.No es una entrada al servidor.
Una cookie es un sistema de persistencia por el lado del cliente, y llega al servidor desde "fuera".Todo lo que está "fuera" es inseguro.Pero una sesión, por definición, está en el lado del servidor.

Te lo pongo de otro modo: tú puedes almacenar la sesión en base de datos.Se
convierte en una tabla más, igual que cualquier otra.No haces is_int() sobre lo que recibes de base de datos.
  #13 (permalink)  
Antiguo 16/01/2013, 17:47
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por andresdzphp Ver Mensaje
Pues ve a buscar al php.ini la solución de algo tan básico, y no pienso confundir a un "estudiante" con tus arrays blablabla. En windows funciona porque está definida, al probarlo en otro lado, no lo está y por lo tanto esa condición no funciona.
Ah.Como es un estudiante, le mandas a que se busque las respuestas de algo básico.Pensaba que era justo al revés.
Y..no.No funciona en windows porque está definida. .El código es el mismo.Funciona en windows, y no en su mac, por blablabla.
  #14 (permalink)  
Antiguo 16/01/2013, 17:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por dashtrash Ver Mensaje
Ah.Como es un estudiante, le mandas a que se busque las respuestas de algo básico.Pensaba que era justo al revés.
Y..no.No funciona en windows porque está definida. .El código es el mismo.Funciona en windows, y no en su mac, por blablabla.

Según vos porque funciona en windows este código?

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <title>Contador de visitas</title>
  6. </head>
  7.  
  8. <body>
  9.     <?php
  10.         if($_SESSION['contador'] != 0){
  11.                 $_SESSION['contador'] = $_SESSION['contador']+1;
  12.             }
  13.         else{
  14.                 $_SESSION['contador'] = 0;
  15.             }
  16.        
  17.         echo"Esta es su visita numero: ".$_SESSION['contador']." a esta pagina.";
  18.         echo "<br>";
  19.         echo"<a href='Ejercicio Contador.php'>Mira como sube el contador al pulsar aqui</a>";
  20.     ?>
  21.    
  22. </body>
  23. </html>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #15 (permalink)  
Antiguo 16/01/2013, 18:14
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por andresdzphp Ver Mensaje
Según vos porque funciona en windows este código?
Vaya, pues yo estaba equivocado...Y tú también.Es ahora cuando lo he mirado.Antes me quedé leyendo en el asunto de Windows.Obviamente, ese código no funciona ni en Windows, ni en ningún sitio.
El isset() que le has recomendado, hace que el código funcione...Pero no porque "no hubiera sido definida"...o si.

Código PHP:
Ver original
  1. if($_SESSION['contador'] != 0){
  2.                 $_SESSION['contador'] = $_SESSION['contador']+1;
  3.             }
  4.         else{
  5.                 $_SESSION['contador'] = 0;
  6.             }
Ese código dice:
- Si una variable NO es cero, la modifico.
- Si no (es decir, la variable es cero) , la pongo a cero.

Si la variable comienza siendo cero, o, como hace php, NULL==0, nunca se va a modificar.
El siguiente codigo es valido:
Código PHP:
Ver original
  1. if($_SESSION['contador'] != 0){
  2.                 $_SESSION['contador'] = $_SESSION['contador']+1;
  3.             }
  4.         else{
  5.                 $_SESSION['contador'] = 1;
  6.             }
y no necesita isset.

El siguiente código es válido:
Código PHP:
Ver original
  1. $_SESSION['contador']++;
Y tampoco lo necesita, y no depende ni de arrays ni de bla bla bla
  #16 (permalink)  
Antiguo 16/01/2013, 18:20
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por dashtrash Ver Mensaje
El siguiente codigo es valido:
Código PHP:
Ver original
  1. if($_SESSION['contador'] != 0){
  2.                 $_SESSION['contador'] = $_SESSION['contador']+1;
  3.             }
  4.         else{
  5.                 $_SESSION['contador'] = 1;
  6.             }
y no necesita isset.
Te das cuenta que es el mismo código que no funciona? Cómo sería sin isset? El equivocado es otro.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #17 (permalink)  
Antiguo 16/01/2013, 18:23
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Cita:
Iniciado por andresdzphp Ver Mensaje
Te das cuenta que es el mismo código que no funciona? Cómo sería sin isset? El equivocado es otro.
Seguro que es el mismo código que no funciona?
Mira bien.

Además, te he puesto otro ejemplo que funciona sin isset().
Lee bien el código.mira las condiciones.No tiene nada que ver con isset().
  #18 (permalink)  
Antiguo 16/01/2013, 18:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones de PHP

Si no defines el índice contador no suma así de sencillo. Te da un error de tipo:

Cita:
Notice: Undefined index: contador
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #19 (permalink)  
Antiguo 16/01/2013, 18:34
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Ahora es cuando vas al manual, ya que lo mencionas en tu firma, y miras dónde dice que un Notice es un error.Y cuando un Notice, detiene la ejecución de un script php.
Sí suma..Así de sencillo...
  #20 (permalink)  
Antiguo 16/01/2013, 18:41
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema con sesiones de PHP

Una forma como otra cualquiera de decir "tienes toda la razón".

Etiquetas: macbook, sesiones_en_php, applet
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 02:34.