Auto-Edit - Doppelpost bei Timeout

Mir selbst ist es schon das eine oder andere mal passiert das es nach einem Timeout (gleich ob beim eröffnen eines Themas oder normalen Antwort-Post) auf Grund der teilweise trägen Reaktionszeit der Seite (Was ist dafür eigentlich der Grund ?) zu einem Doppel-Post kommt der automatisch als Edit (übrigens sehr gute Idee) eingefügt wird. Ich hab es jetzt noch nicht ausprobiert, könnte mir aber vorstellen das man damit Überläufe der Längen-Prüfung provozieren könnte.
Sicher, wenn man drauf achtet klickt man einfach auf EDIT und wirft den überflüssigen Doppel-Post wieder raus, aber es ist manchmal schon etwas störend. Entweder ist das Timeout zu knapp bemessen oder irgendwo hat sich ein Bug versteckt der bei Überschreiten des Timeouts den Post einfach noch mal überträgt.

Beim quick-response über Ajax sicher eine gute Idee um Datenverlust zu vermeiden, aber gerade beim erstellen eines Threads total überflüssig.

Ist bekannt.
Die Geschwindigkeit der Seite kann dir nur Eagle erklären. Ist bei mir ähnlich.
Ich kuck oben auf den Tab, und wenn der noch lädt, brauch ich das nicht nochmal abschicken.

es läuft doch auf Client-Seite irgendeine Skript-Magie die Antwort-Boxen ausklappt usw.,
(ich nenne alles Ajax-Probleme, aber vielleicht davon passiert ja ohne Server-Beteiligung),

könnte man dieses Features oder sonstiges Skript positiv dafür nutzen,
den Antwort-Button nach Klick zu deaktivieren, zu verdecken,
oder beim zweiten Klick eine Meldung ‚du hast schon geklickt, warte bisschen, wirklich nochmal? ja/nein‘ auszugeben? :wink:

Nee, das ist Browserabhängig. Da hat die Forensoftware keinen Einfluss.
Genauer kann das @EagleEye erklären. So sicher bin ich mir da nämlich nicht. Als ich noch selber Style’s gebaut habe, waren (unter anderem) die Button in den Antworten vom Browserstyle abhängig.

Hmmm ich habs paar mal beobachtet, aber ich hatte gedacht dass das nur bei Mods/Admins auftreten kann weil alle anderen eine Grenze haben wie häufig sie posten dürfen in einer bestimmten Zeitspanne. Aber wenn das bei dir trotzdem geht muss das nen Bug im Forum sein

Ich guck mal.

Edit: Ist auf 30 Sekunden eingestellt. Sollte reichen, um nicht sofort wieder das Selbe abzuschicken - vielleicht doch ein Bug.
Mods/Admins sind davon ausgeschlossen.

Danke erstmal für die Antworten, aber ich glaube ihr versteht mich falsch.

Konkretes Beispiel :

Ich verfasse einen längeren Text (ist man bei mir ja gewohnt) und klicke EINMAL auf Anworten.
Abhängig davon wie lange dieses “Antworten” dauert (ich sage jetzt mal : bis der Ajax-Call ein Response vom Server erhält) wird der Post entweder korrekt auch nur ein mal gesendet … ODER : es kommt zu einer Art Doppel-Post, also das der Text zwei mal an den Server gesendet wird (mit WireShark geprüft).
Das Server-Script erkennt nun das man selbst auf einen eigenen Post geantwortet hat und statt eines Doppel-Post wird ein Edit draus gemacht (was ich wie gesagt an sich für eine geniale Idee halte).
Die Rückmeldung : “Du hast gerade gepostet, bitte warte 30 Sekunden” bleibt also völlig aus da das Client-Script auf Grund des zu kurzen Timeout (ich würde jetzt mal spontan auf 5 Sekunden tippen) schneller neue Posts schickt als die Verarbeitung des eigentlichen Posts dauert womit halt vermutlich in der Datenbank noch keine Änderung des “last activity” passiert ist, da dies ja normalerweise erst mit dem Post oder danach geändert wird.

Ein möglicher Fix : Wenn vom Client ein Post kommt erst das “last activity” updaten und dann den Post einfügen. So sollte dann bei einem Timeout des Ajax-Scripts der Server hinterher kommen und das zweite Absenden des Posts mit dem Timeout-Fehler quittieren.
Was dabei schief gehen kann : für den Client wird das Antworten / Thema erstellen unter Umständen als “Fehlgeschlagen” gemeldet obwohl tatsächlich ein Eintrag in die DB erfolgt ist.

Müsste man mit Last-Tests etwas genauer simulieren und ggf. Race-Conditions besser ausprogrammieren um eben diese zu vermeiden.

Ich hoffe jetzt wird klar was ich meine.

Passiert das nur im Schnell-Antwort-Editor, oder auch im erweiterten?

ein zweites Posting, innerhalb des edit-Modus, ob durch internen Fehler (vielleicht auch nach Minuten durch irgendeine Browser-Back-Wiederholung) oder schlicht manuell wirklich nochmal abgeschickt,
das sollte bei exakt gleichen Inhalt generell zu keinem doppelten Posting führen,

das könnte man bei Eigenprogrammierung als Regel aufnehmen, hier in kompliziert Black Box Forum wohl kaum möglich


eine strukturierte und sichere Server-Verarbeitung ist aber die Grundlage von allem,
ein zweiter Request vom gleichen User/ Session kann doch nicht die Bearbeitung beginnen,
einen evtl. vorhandenen zum Problem relevanten DB-Wert lesen, bevor nicht der erste Request abgeschlossen ist…

eine solche Regel muss nicht jede Webanwendung haben, aber ein Forum mit überall nur kurzen Aktionen schon,
genauso sind innerhalb eines Threads auch Requests verschiedener User exakt zu trennen,
einer nach dem anderen kommt dran,

verfügt das ganze Konglomerat vBulletin nach wieviel tausend Mannjahren Entwicklung nicht über ein entsprechendes (auch für alle Plugins unumgehbares) Grundkonzept?
jeden Tag neue Überraschung wie schlecht sowas programmiert sein kann…

Mir persönlich ist es schon sowohl im quick-response als auch im erweiterten Editor passiert.
Ich denke die Idee dahinter war ursprünglich mal das halt der Post eingefügt wird und als Antwort die dann neue ID zurückkommt mit der dann eine URL zusammengebaut und aufgerufen wird. Aber wirklich sinnvoll ist es ja doch irgendwie nich … weil z.B. eine wichtige Funktion wie “Es gibt neue Beiträge” beim posten, was man mit sowas ja gut umsetzen könnte, auch fehlt.
Kann man eigentlich komplett rausschmeißen …

[QUOTE=SlaterB;111597]ein zweites Posting, innerhalb des edit-Modus, ob durch internen Fehler (vielleicht auch nach Minuten durch irgendeine Browser-Back-Wiederholung) oder schlicht manuell wirklich nochmal abgeschickt,
das sollte bei exakt gleichen Inhalt generell zu keinem doppelten Posting führen,[/QUOTE]
Sollte normalerweise der Fall sein … aber funktioniert hier ja nicht, wie man immer wieder sieht.

Naja, müsste man gucken wie weit man an die Files kommt und was die Lizenzbestimmungen zum selbstständigen Fixen so sagen.

[QUOTE=SlaterB;111597]eine strukturierte und sichere Server-Verarbeitung ist aber die Grundlage von allem,
ein zweiter Request vom gleichen User/ Session kann doch nicht die Bearbeitung beginnen,
einen evtl. vorhandenen zum Problem relevanten DB-Wert lesen, bevor nicht der erste Request abgeschlossen ist…

eine solche Regel muss nicht jede Webanwendung haben, aber ein Forum mit überall nur kurzen Aktionen schon,
genauso sind innerhalb eines Threads auch Requests verschiedener User exakt zu trennen,
einer nach dem anderen kommt dran,

verfügt das ganze Konglomerat vBulletin nach wieviel tausend Mannjahren Entwicklung nicht über ein entsprechendes (auch für alle Plugins unumgehbares) Grundkonzept?
jeden Tag neue Überraschung wie schlecht sowas programmiert sein kann…[/QUOTE]
Gut, ich hab auch mal was in die Richtung versucht selbst umzusetzen … und Concurrency ist etwas mit dem ich mich so noch nie befasst habe, aber ich denke das es für sowas schon gewisse Standardkonzepte gibt.

Wobei, wenn ich mir auf Arbeit so unsere Zeiterfassung ansehe … wo dann mal eben XAMPP läuft und mysql_connect() durchfällt mit der Meldung “Too many connections!” … scheint man diese Standards, wenn es sie denn gibt, ja nicht umzusetzen.

Hallo Sen,

also es gibt einen Timeout für die Übertragung von Text an Server, du möchtest aber, das auf Serverseite nur bis EOT gelesen, verarbeitet wird und dann verworfen wird? Wieso klickst du denn öfters auf Senden? Wenn du das im file explorer auch so machst, sind deine Dateien weg, verschoben, kopiert o. Ä.

das Forum wird wahrscheinlich tausende Seiten an Quelltext haben, selbst nach den Bestimmungen zu (ver-)ändern, schwierig.

Verstehst du, was ich meine?

Erlich gesagt : NEIN, weder deine Paraphrase noch den Vergleich

Worum es mir geht ist eigentlich recht einfach erklärt : durch irgendein Script wird ein Post der vom User ein mal “abgeschickt” wird mehrfach an den Server gesendet so dass Systeme die einen versehentlichen Doppel-Post / -Thread verhindern sollen unterlaufen werden und als nächstes die Funktion des Auto-Edit greift ohne das dabei der Inhalt geprüft wird.

Was ich vermute ist dass es zu einer Überschneidung zwischen Einfügen in die Datenbank und auslesen des “last action”-Wertes kommt der eigentlich sowas verhindern sollte. Ob das nun ein Server-spezifischer Bug ist weil es hier und da gerne mal zu nem Overload kommt oder ein genereller Fehler im Konzept der Idee die dahinter steht kann ich nur vermuten. Um es genau zu analysieren müsste man die betroffenen Scripts und mitwirkenden Systeme und Verbindungen quasi unter “Laborbedingungen” isolieren das man sie nach belieben verändern kann.

Sicher ist es ein nettes Feature hier und da mit AJAX etwas Dynamik reinzubringen, aber an einigen Stellen ist es zumindest meiner Ansicht nach übertrieben und könnte man weglassen, womit dann auch solche Probleme behoben wären.

Paraphrase, Vergleich, platonischer Vergleich/Dialog,… sag das doch gleich:, Ajax verschickt die Nachricht 2x, schnell/langsam (Timeout?), s. d. System(e), doppelte Posts zu verhindern, umgangen wird/werden. Und nachdem das ‚defensive‘ System „ausgehebelt“ wurde, greift das ‚offensive‘.

Konntest du „beobachten“, ob immer 2x verschickt wird, oder nur manchmal, unter den und den Bedingungen?

Das kann alles Mögliche sein, AJAX ist zu langsam, JS, Ping/RTT, PHP, file, Interpretar, Datenbank, whatever.

Ich hatte das Problem aber auch schon - oder schon seit einiger Zeit. Zwischen Verschicken und „fertiger“ Nachricht, die dann dargestellt ist, liegen mindestens 5 Sekunden. Ich nehme mal an, keiner (Mensch) kann so schnell einen Blick darauf werden. :wink: Das ist aber wieder mal spleenig von mir.

ÄÄhhhhhm … vielleicht fällt mir morgen noch etwas dazu ein, 'ne neue Idee. Aus Sicht des Users/Clients siehst ja sowieso nur Ajax.

Muss zugeben : Das irritiert mich am meisten : Die paar mal wo ich durch Zufall WireShark mitlaufen hatte ergaben : manchmal wird es tatsächlich 2 mal vom Client an den Server gesendet, manchmal aber auch nur einmal und dann scheinbar auf dem Server dupliziert. Es ist also nicht mal konsistent wenn es dann passiert.