eliminar el elemento de la base de datos después de 30 minutos

Hola, traté de encontrar la respuesta a mi pregunta en Google pero no pude ... Quiero decir que había respuestas que puedo, y no puedo hacer lo que quiero hacer ...

Quiero tener una secuencia de comandos, que cuenta cuántos usuarios están en línea en mi sitio, pero esta secuencia de comandos debe contar invitados, así que he creado una base de datos para la sesión, esta secuencia de comandos le da una identificación al usuario y establece una sesión de 30 minutos, y ahora tengo un problema, porque si no está activo más de 30 minutos, debe eliminarse de la base de datos, porque quiero contar por ID cuántos usuarios hay en línea, y tengo dolor de cabeza, ¿cómo puedo hacer esto?

¿Hay una manera simple de hacer esto?

Perdón por mi inglés, pero espero que entiendas lo que quiero decir.

0

2 Respuestas

Como dijo Barmar en su responde aquí :

DELETE FROM my_table
WHERE timestamp < NOW() - INTERVAL 30 MINUTE

Write a PHP script that executes this SQL, and add a crontab entry that runs it every 30 minutes. Or use the MySQL Event Scheduler to run it periodically; it is described here.

0
agregado
@hakre En este caso encontré la respuesta pero no sabía que debería establecerse la fuente. Ahora lo sé
agregado el autor sergio, fuente
OK lo comprobaré. No hay problema. Gracias por un buen comentario
agregado el autor sergio, fuente
Lo verificaré, porque existe la posibilidad de que no haya una respuesta duplicada, excepto esto.
agregado el autor sergio, fuente
@hakre "Lo haré para el futuro" significa que si hay una respuesta, simplemente estableceré la url para esta respuesta
agregado el autor sergio, fuente
@hakre. Ahora está claro para mí. Pero pensé que era mejor mostrar de inmediato la respuesta. Está bien, no hay problema.
agregado el autor sergio, fuente
Editado Gracias. Lo haré para el futuro.
agregado el autor sergio, fuente
Use algo como esto: "ACTUALIZAR la sesión SET start = NOW() WHERE id = '% s'", mysql_real_escape_string ($ session_id)
agregado el autor sergio, fuente
@jackflash, quiero actualizar sesión una y otra vez, vaya a la página nueva, por ejemplo, haga clic en contact.html, luego la sesión se actualizará por NOW() :)
agregado el autor zwyrol, fuente
Solo tenga cuidado con los cambios en el horario de verano, un cambio de una hora matará todas sus sesiones de forma instantánea.
agregado el autor Joachim Isaksson, fuente
@sergio, debes estar bromeando. Ahora estoy marcando "tus" respuestas. "Lo haré para el futuro" - ¿Espera de nosotros limpiar después de usted o qué quiere decir por "futuro" ?
agregado el autor hakre, fuente
@sergio: no se trata de fuente , se trata de que duplique contenido. Eso dispersa el sitio. Deje un comentario con un enlace a la pregunta/respuesta duplicada si cree que es apropiado. Claro que eso no le da ninguna reputación, pero es la forma en que funciona este sitio.
agregado el autor hakre, fuente
@sergio: ahora limpia el desastre que te queda en el sitio. Puedes borrar "tus" respuestas. En caso de que sea aceptado y no pueda eliminarlo, solicite a los moderadores que lo ayuden a marcar la pregunta como un duplicado (dígales cuál fue la pregunta duplicada) y luego solicite que eliminen su respuesta.
agregado el autor hakre, fuente
@sergio: crea una lista de las respuestas que has duplicado y agrégalas a el chat . También haga visible desde donde ha copiado eso. Entonces me sentiré invitada a echar un vistazo si quieres.
agregado el autor hakre, fuente
Esa posibilidad es casi cero. El oppsite es más el caso, existe la posibilidad de que haya copiado muchas respuestas.
agregado el autor hakre, fuente
La copia/pegado directo de la respuesta de otro usuario ( aquí ) generalmente está mal visto. Al menos reescríbelo en tus propias palabras. Si no quiere hacer eso, vuelva a enlazar con la publicación original en lugar de copiar/pegar (para que haya un punto de referencia canónico). De lo contrario, solo estás tomando crédito por el trabajo de otro y diluyendo el contenido ...
agregado el autor ircmaxell, fuente
puede ejecutar esta consulta justo antes de que un usuario vea el contador de usuarios en línea.
agregado el autor Lan, fuente
@ user3110241 Sí, eso es lo que quise decir con "escribir". Si desea precisión de minutos, debe realizar la eliminación cada 90 segundos.
agregado el autor Carlos, fuente
@sergio Si lo ejecuta cada 30 minutos, algunas sesiones pueden tardar hasta 1 hora (en el caso de que se realice una escritura justo después de una eliminación). Y en el mejor de los casos (una escritura se realiza justo antes de una eliminación, que es tan difícil como lo contrario) obtendrá sesiones de 30 minutos de duración. Como resultado, sus sesiones tendrán un promedio de 45 minutos de duración.
agregado el autor Carlos, fuente

Como no ha mencionado ninguna base de datos en específico, le doy una idea general de cómo implementarla:

Puedes tener una tabla como esta:

USER_SESSIONS
(
  USER_ID //UNIQUE_ID
  LAST_ACTIVE //TIMESTAMP
)

Aquí está la funcionalidad que puede asociar para implementar la sesión:

  1. Cuando un usuario inicia sesión, crea una entrada en esta tabla.
  2. Cuando un usuario cierra la sesión, elimina la entrada correspondiente de esta tabla.
  3. Cuando el usuario realiza alguna actividad (depende de cómo quiera rastrear la actividad en la interfaz), actualice el TIMESTAMP correspondiente del usuario.
  4. Cree un horario de base de datos (un proceso que se ejecuta continuamente) que supervisa la columna TIMESTAMP. Todas las buenas bases de datos tienen un programador integrado. Aquí hay un pseudo código para el programador:
FOR each entry in USER_SESSIONS
 If (CURRENT_TIMESTAMP - LAST_ACTIVE) > [30 mins]  then
    delete the entry of the corresponding user from this table.
    //This will essentially cause a session timeout.
 End If
LOOP;

Espero que tengas una buena idea de cómo implementarlo.

Happy Coding :)

0
agregado
PHP - Comunidad española
PHP - Comunidad española
6 de los participantes

En este grupo hablamos de PHP. Partner: es.switch-case.com