Löschen eines Artikels aus der Datenbank nach 30 Minuten

Hallo Ich habe versucht, die Antwort auf meine Frage in Google zu finden, aber ich konnte nicht ... Ich meine, es gab Antworten, die ich kann, und ich kann nicht tun, was ich tun möchte ...

Ich möchte ein Skript haben, das zählt, wie viele Benutzer auf meiner Website online sind, aber dieses Skript sollte Gäste zählen, also habe ich eine Datenbank für die Sitzung erstellt, dieses Skript gibt dem Benutzer eine ID und 30 Minuten Sitzung, und jetzt habe ich ein Problem, denn wenn er nicht mehr als 30 Minuten aktiv ist, sollte er aus der Datenbank gelöscht werden, da ich per ID zählen möchte, wie viele Benutzer online sind, und ich habe Kopfschmerzen, wie kann ich das tun.

Gibt es einen einfachen Weg, dies zu tun?

Sorry für mein Englisch, aber ich hoffe du verstehst was ich meine.

0

2 Antworten

Wie von Barmar in deren antworte hier :

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
hinzugefügt
@hakre Ich habe in diesem Fall die Antwort gefunden, wusste aber nicht, dass es die Quelle sein sollte. Jetzt weiß ich es
hinzugefügt der Autor sergio, Quelle
OK ich werde es überprüfen. Kein Problem. Danke für die gute Bemerkung
hinzugefügt der Autor sergio, Quelle
Ich werde es überprüfen, weil es eine Chance gibt, dass es keine doppelte Antwort außer diesem gibt.
hinzugefügt der Autor sergio, Quelle
@hakre "Ich werde es für die Zukunft tun" bedeutet, dass, wenn die Antwort gesetzt ist, ich die URL nur auf diese Antwort setzen werde
hinzugefügt der Autor sergio, Quelle
@hakre. Jetzt ist es klar für mich. Aber ich dachte es wäre besser, sofort die Antwort zu zeigen. OK, kein Problem.
hinzugefügt der Autor sergio, Quelle
Bearbeitet. Vielen Dank. Ich werde es für die Zukunft tun.
hinzugefügt der Autor sergio, Quelle
Verwenden Sie etwa Folgendes: "UPDATE-Sitzung SET start = NOW() WHERE id = '% s'", mysql_real_escape_string ($ sitzungs_id)
hinzugefügt der Autor sergio, Quelle
@jackflash, Ich möchte die Sitzung nach der Zeit aktualisieren Sie gehen auf die neue Seite, zum Beispiel klicken Sie auf contact.html, dann wird die Sitzung von NOW() aktualisiert :)
hinzugefügt der Autor zwyrol, Quelle
Passen Sie nur auf Änderungen bei der Sommerzeit auf, ein Wechsel nach einer Stunde wird alle Ihre Sitzungen sofort beenden.
hinzugefügt der Autor Joachim Isaksson, Quelle
@ Sergio, müssen Sie Spaß machen. Ich markiere jetzt "deine" Antworten. „Ich werde es für die Zukunft tun“ - Haben Sie von uns erwarten, nachdem Sie zu reinigen oder was wollen Sie sagen von „Zukunft“ ?
hinzugefügt der Autor hakre, Quelle
@sergio: Es geht nicht um Quelle , es geht darum, dass du Inhalte duplizierst. Das zerstreut die Seite. Hinterlasse einen Kommentar mit einem Link zu der doppelten Frage/Antwort, wenn du denkst, dass es passt. Sicher, das bringt dir keinen Ruf, aber so funktioniert diese Seite.
hinzugefügt der Autor hakre, Quelle
@sergio: Bereinige jetzt das Chaos, das du auf der Seite hinterlassen hast. Sie können "Ihre" Antworten löschen. Falls es akzeptiert wird und Sie es nicht löschen können, bitten Sie die Moderatoren, Ihnen zu helfen, die Frage als Duplikat zu markieren (sagen Sie ihnen, was die doppelte Frage war) und bitten Sie sie dann, Ihre Antwort zu löschen.
hinzugefügt der Autor hakre, Quelle
@sergio: Erstellen Sie eine Liste der Antworten, die Sie dupliziert haben, und fügen Sie sie hinzu der Chat . Machen Sie auch sichtbar von wo Sie das kopiert haben. Ich werde mich dann eingeladen fühlen, einen Blick darauf zu werfen, wenn Sie möchten.
hinzugefügt der Autor hakre, Quelle
Diese Chance liegt ungefähr bei Null. Die Oppsite ist eher der Fall, es gibt eine Chance, dass Sie viele Antworten kopiert haben.
hinzugefügt der Autor hakre, Quelle
Das direkte Kopieren/Einfügen aus der Antwort eines anderen Benutzers ( hier ) ist im Allgemeinen verpönt. Schreibe es wenigstens in deinen eigenen Worten um. Wenn Sie dies nicht tun möchten, verknüpfen Sie den ursprünglichen Post nicht mit dem Kopieren/Einfügen (es gibt also einen kanonischen Referenzpunkt). Sonst nimmst du nur Anerkennung für die Arbeit eines anderen und verdünnst den Inhalt ...
hinzugefügt der Autor ircmaxell, Quelle
Sie können diese Abfrage ausführen, bevor ein Benutzer den Zähler der Online-Benutzer sehen würde.
hinzugefügt der Autor Lan, Quelle
@ user3110241 Ja, das meinte ich mit einem "write". Wenn Sie eine minutiöse Genauigkeit wünschen, sollten Sie das Löschen alle 90 Sekunden durchführen.
hinzugefügt der Autor Carlos, Quelle
@sergio Wenn Sie es alle 30 Minuten ausführen, können einige Sitzungen bis zu einer Stunde dauern (in dem Fall, dass ein Schreibvorgang unmittelbar nach einem Löschvorgang ausgeführt wird). Und im besten Fall (ein Schreiben wird kurz vor einer Löschung gemacht, was genauso schwierig ist wie das Gegenteil), erhalten Sie 30 Minuten lange Sitzungen. Als Ergebnis werden Ihre Sitzungen durchschnittlich 45 Minuten lang.
hinzugefügt der Autor Carlos, Quelle

Da Sie keine Datenbank speziell erwähnt haben, gebe ich Ihnen eine allgemeine Vorstellung davon, wie Sie sie implementieren können:

Sie können eine Tabelle wie folgt haben:

USER_SESSIONS
(
  USER_ID //UNIQUE_ID
  LAST_ACTIVE //TIMESTAMP
)

Hier ist die Funktionalität, die Sie zum Implementieren der Sitzung zuordnen können:

  1. Wenn sich ein Benutzer anmeldet, erstellen Sie einen Eintrag in dieser Tabelle.
  2. Wenn sich ein Benutzer abmeldet, löschen Sie den entsprechenden Eintrag aus dieser Tabelle.
  3. Wenn der Benutzer eine Aktivität ausführt (hängt davon ab, wie Sie die Aktivität im Frontend verfolgen möchten), aktualisieren Sie das entsprechende TIMESTAMP des Benutzers.
  4. Erstellen Sie einen DB-Ablaufplan (ein fortlaufender Prozess), der die Spalte TIMESTAMP überwacht. Alle guten Datenbanken haben einen eingebauten Scheduler. Hier ist ein Pseudocode für den Scheduler:
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;

Ich hoffe, Sie haben eine gute Idee, wie Sie es umsetzen können.

Glückliche Kodierung :)

0
hinzugefügt
PHP - Deutsche Gemeinschaft
PHP - Deutsche Gemeinschaft
5 der Teilnehmer

In dieser Gruppe sprechen wir über PHP. Partner: de.switch-case.com