Hallo zusammen.
Ich arbeite mit einem Session basierten CMS.
Ein User kann eine Abfrage starten und muss (ggf.) bis zu X Minuten warten, bis die Abfrage beendet wurde, und die Ergebnisse dargestellt werden.
X Minuten sind dem User aber manchmal zu lange - der User klickt also nochmals auf die Anfrage, welche natürlich erst dann gestartet wird, wenn die andere erst erfolgreich beendet wurde (Sessionlock hält die Anfrage solange, bis die andere abgearbeitet wurde).
Insgesamt kann es so manchmal zu einem "Stau" an Anfragen kommen.
Das nervt den User nach einer Zeit, und er verlässt die Seite.
Lassen wir mal die Wartezeit außer acht (die Momentan zwar das Problem ist, aber hier jetzt kein Thema sein soll).
Ich würde gerne die komplette Abfrage (PHP-Abarbeitung, sowie MySQL Abfragen) verwerfen, sobald ich bemerke dass der User die Seite verlässt.
Es gibt in PHP eine Verbindungssteuerung, mit dieser ich abfragen kann, ob der User sich noch auf der Seite befindet.
Das ganze funktioniert - ich bekomme mein "aborted"-Status.
Jedoch kann ich die weitere Ausführung des Scriptes nicht stoppen.
Geschweige denn MySQL Abfragen abbrechen.
Ist das überhaupt irgendwie innerhalb des gleichen Scripts möglich?
Eine Lösung a la: per JS abfangen ob ein Benutzer die Seite verlässt und dann ein Ajax an eine seperate PHP (andere Session etc), welche dann diese Prozesse "hart" killt, kommt für mich nicht in Frage.
Ich arbeite mit einem Session basierten CMS.
Ein User kann eine Abfrage starten und muss (ggf.) bis zu X Minuten warten, bis die Abfrage beendet wurde, und die Ergebnisse dargestellt werden.
X Minuten sind dem User aber manchmal zu lange - der User klickt also nochmals auf die Anfrage, welche natürlich erst dann gestartet wird, wenn die andere erst erfolgreich beendet wurde (Sessionlock hält die Anfrage solange, bis die andere abgearbeitet wurde).
Insgesamt kann es so manchmal zu einem "Stau" an Anfragen kommen.
Das nervt den User nach einer Zeit, und er verlässt die Seite.
Lassen wir mal die Wartezeit außer acht (die Momentan zwar das Problem ist, aber hier jetzt kein Thema sein soll).
Ich würde gerne die komplette Abfrage (PHP-Abarbeitung, sowie MySQL Abfragen) verwerfen, sobald ich bemerke dass der User die Seite verlässt.
Es gibt in PHP eine Verbindungssteuerung, mit dieser ich abfragen kann, ob der User sich noch auf der Seite befindet.
Das ganze funktioniert - ich bekomme mein "aborted"-Status.
Jedoch kann ich die weitere Ausführung des Scriptes nicht stoppen.
Geschweige denn MySQL Abfragen abbrechen.
PHP Code:
<?php
sleep(5);
function test_abort()
{
touch('abborted.success');
die();
}
register_shutdown_function('test_abort');
sleep(5);
touch('abborted.fail');
die('end_test');
Eine Lösung a la: per JS abfangen ob ein Benutzer die Seite verlässt und dann ein Ajax an eine seperate PHP (andere Session etc), welche dann diese Prozesse "hart" killt, kommt für mich nicht in Frage.
Comment