Ver Mensaje Individual
  #20 (permalink)  
Antiguo 04/12/2012, 08:59
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como hacer la estructura de la base de datos para un contador general de v

!Ah! Ahora entiendo.
Bueno, lo que propones, puede andar, pero no podrías diferenciar las diferentes veces que un usuario ingresa en un mismo día con sesiones distintas.
Incluso, no te permitiría restringir el acceso indebido de una persona que use el mismo usuario desde otro terminal, con sesiones solapadas (superpuestas).
El uso de un ID de sesión es mucho mejor para darle trazabilidad al uso del sistema y a las visitas.
Por eso es algo muy habitual.
Una de las opciones que puedes usar es generar un identificador único con MySQL (si no quieres hacerlo en PHP), con la función uuid() de MySQL, que llamarías al momento del login del usuario en cuestión.
Este UUID es un identificador único se supone que a nivel planetario (o algo así):
Cita:
UUID()

Retorna un Universal Unique Identifier (UUID) (Identificador Único Universal) generado según la “DCE 1.1: Remote Procedure Call” (Apéndice A) CAE (Common Applications Environment) Especificaciones publicadas por The Open Group en Octubre 1997 (Número de Documento C706).

Se designa un UUID como número que es único globalmente en espacio y tiempo. Dos llamadas a UUID() generan dos valores distintos, incluso si estas llamadas se realizan en dos máquinas separadas y no están conectadas entre ellas.

Un UUID es un número de 128 bits representado por una cadena de cinco números hexadecimales en formato aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:

Los primeros tres números se generan de un valor temporal.

El cuarto número preserva unicidad temporal en caso de que el valor temporal pierda moniticidad (por ejemplo, debido al cambio horario).

El quinto número es un número IEEE 802 de nodo que proporciona unicidad espacial. Un número aleatorio se sustituye si el último no está disponible (por ejemplo, debido a que la máquina no tenga tarjeta Ethernet, o no sabemos encontrar la dirección hardware de una interfaz en el sistema operativo). En este caso, la unicidad espacial no se puede garantizar. Sin embargo, una colisión debe tener una probabilidad muy baja.

Actualmente, la dirección MAC de una interfaz se tiene en cuenta sólo en FreeBSD y Linux. En otros sistemas operativos, MySQL usa un número generado aleatoriamente de 48 bits.

Código MySQL:
Ver original
  1. mysql> SELECT UUID();
  2.         -> '6ccd780c-baba-1026-9564-0040f4311e29'
En definitiva, combinas ambas cosas (PHP y MySQL):
- Cuando loguea, tomas un UUID generado en MySQL.
- Lo almacenas como ID de sesión (PHP) y en la Visita (MySQL).
- En cada operación de navegación, validas que sea el mismo valor que el último ID de visita y lo insertas en la navegación (MySQL).
- Al cerrar la sesión (o salir) destruyes el objeto sesión (PHP), de modo que al volver a entrar generas otro.

¿Se entiende la idea?

Sobre la posibilidad de que una persona intente entrar con un user que tiene una sesión abierta, se deben realizar validaciones preventivas:
En tu sistema debes verificar si el usuario ha tenido un inicio de visita cuya última navegación haya sido anterior al máximo timeout que el sistema soporte. Si el timeout (tiempo en que no ha habido actividad por el usuario con sesión abierta) se venció, entonces puede loguear.
De ese modo puedes asegurarte que no hay sesiones "vivas" en curso, y avisarle al usuario entrante que aún no puede loguearse con ese usuario.
Son temas de prevención en sistemas asincrónicos como estos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 04/12/2012 a las 09:08