Foros del Web » Programando para Internet » PHP »

una sobre sesiones -

Estas en el tema de una sobre sesiones - en el foro de PHP en Foros del Web. tengo un contador en todas las paginas de mi web, pero quiero que este solo sume una vez al visitante no cada vez que cambie ...
  #1 (permalink)  
Antiguo 26/04/2006, 11:07
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
una sobre sesiones -

tengo un contador en todas las paginas de mi web, pero quiero que este solo sume una vez al visitante no cada vez que cambie de pagina..

como puedo preparar esa condicion??

if eres_nuevo {
suma_"este punto ya lo tengo"
}

gracias a todos.
  #2 (permalink)  
Antiguo 26/04/2006, 11:14
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Añade esto al principio de cada pagina. Un saludo

Código PHP:
<?php
// inicializa los datos de sesion
session_start();

// comprobamos si existe esta variable
if( !isset($_SESSION["iniciada"]) )
{
     
// añadir uno al contador

     // creamos e inicializamos la variable
     
$_SESSION["iniciada"] = true;
}
?>
  #3 (permalink)  
Antiguo 26/04/2006, 11:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
Cita:
Iniciado por jerkan
Añade esto al principio de cada pagina. Un saludo

Código PHP:
<?php
// inicializa los datos de sesion
session_start();

// comprobamos si existe esta variable
if( !isset($_SESSION["iniciada"]) )
{
     
// añadir uno al contador

     // creamos e inicializamos la variable
     
$_SESSION["iniciada"] = true;
}
?>
Gracias, era el codigo que estaba utilizando y al ver que era igual indague mas en el error que tengo y te cuento
Resulta que si pongo
session_start();
y el resto del codigo en un include me da error, pero si saco del include
session_start();
y lo añado manualmente a todas las paginas, funciona perfectamente..

Sabrias decirme que puede estar pasando?
  #4 (permalink)  
Antiguo 26/04/2006, 11:51
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
supongo q sera porque session_start(); tiene que ir en la primera linea.

¿ya que estoy abriendo una sesion por visita, como podria aprovechar esto y saber cuantas sesiones activas tengo?

gracias
  #5 (permalink)  
Antiguo 26/04/2006, 12:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías indicar el mensaje de error textual que obtienes .. El error normalmente dice exactamente el problema (tras la "interpretación" del mismo eso sí).

Cita:
¿ya que estoy abriendo una sesion por visita, como podria aprovechar esto y saber cuantas sesiones activas tengo?
Directamente con PHP y funciones de sesiones no se puede. (no hay función para contar los "session_start()" que generar un SID y una sesión en consecuencia en el servidor + por ejemplo saber su tiempo de vida ..)

Para el caso concreto de saber tus "sesiones abiertas" tendrías que mantener tu mismo ese dato. Almacena en una BBDD (tabla) quien hace "login" en tu sistema .. y lo actualizas cuando salga del sistema tu usuario (por su "logout") .. luego vendrán problemas como "¿como saber que mi usuario se fué del sistema sin pasar por el "logout"? .. En este caso ya te convendría usar otro sistema de gestión de sesiones; no el uso "básico" de sesiones que PHP proporciona sino algo "extendido" (propuestas tienes en los comentarios de los usuarios/comentarios de www.php.net/session)


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 26/04/2006, 12:53
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
gracias cluster

bueno lo del error es el siguiente

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at contacto.php:11) in contador_es.php on line 4

resulta que la pagina contacto.php llama a un archivo por include y luego ese otro archivo llama al contador.php que es donde tengo session_start()

lo de saber cuantas sesiones activas lo voy a dejar demomento o lo creo en ASP que resulta mas facil.
un saludo.
  #7 (permalink)  
Antiguo 26/04/2006, 13:02
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 cache limiter - headers already sent (output started at contacto.php:11) in contador_es.php on line 4
Como te hacía el comentario .. el mensaje de erro te indica el error:

Te dice que en el scritp contacto.php línea 11 tienes algo de HTML .. o de salida al navegador antes de un uso de session_start()

Podría ser esa "Salida" un simple espacio al final de tu "contacto.php" al final de ?> .. o un salto de línea ..

Si indicas el código completo de ambos scripts se podría ver mejor que lo origina y sobre todo como ordenarlo para que no suceda esa situación.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 26/04/2006, 13:50
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at contacto.php:10) in contador.php on line 3

contacto
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<link href="includes/style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="895" border="0" align="center" cellpadding="0" cellspacing="0">
esta ultima linea es la 10 lo raro es q aun no aparece el inlude de lleva a contador.php

contador.php
<?php
// inicializa los datos de sesion
session_start();
esta ultima linea es la 3

la pagina contacto tiene mas abajo un include que llama a lateral_iz.php y dentro de lateral_iz.php tengo el include que va a contador.php

si en vez de poner session_start en contador.php lo pongo en la primera linea de contacto no existe error y va perfecto...
  #9 (permalink)  
Antiguo 26/04/2006, 13:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
si en vez de poner session_start en contador.php lo pongo en la primera linea de contacto no existe error y va perfecto...
Es así como debe quedar .. pues es requisito indespensable de la función session_start() que esté colocada -antes- de cualquier "salida" que se origine. En tu caso ese HTML de "contacto.php" es lo que origina esa "salida".

Ahora .. lo que podrías hacer es validar (si es que ese código de "contador.php" no lo hace ya .. algo tipo:

Código PHP:
<?
if (empty($_SESSION['alguna_variable'])){
die (
"No está permitido el acceso directo a este script");
}
Esto con el fin de evitar que se ejecute el código de "contador.php" si se llama directo por el URL (sin llamarlo por un include() desde otro script)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 26/04/2006, 14:31
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 15 años, 1 mes
Puntos: 6
entendido
de todas formas no hace falta proteger el acceso directo a contador ya que el solito da error por las rutas que utiliza
  #11 (permalink)  
Antiguo 26/04/2006, 15:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por suntus
entendido
de todas formas no hace falta proteger el acceso directo a contador ya que el solito da error por las rutas que utiliza
Siempre es más "limpio" controlar un evento (o error) que sabes que se puede producir que esperar que el script "reviente" dando rutas y nombres de escripts "sensibles" en el mensaje de error ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 14:30.