Forum: www.mikrocontroller.net Doppelbeiträge


von smay4finger. (Gast)


Lesenswert?

Hallo Andreas,

wie kommen eigentlich die ganzen Doppel-Beiträge zustande?

Kann man das nicht irgendwie verhindern?

mfg, Stefan.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Doppelpostings entstehen, weil Leute nach dem Absenden ihres Textes
den "zurück"-Knopf ihres Browsers anklicken, was dafür sorgt, daß der
ganze POST-Inhalt nochmal gesendet wird (und nochmal, und nochmal ...).

Vernünftige Browser fragen in so einem Fall den Benutzer, ob er das
auch wirklich so will; wer dann immer noch auf "zurück" klickt,
erzeugt willentlich und absichtlich Mehrfachpostings.

Mit etwas Selbstdisziplin lassen sich also Mehrfachpostings vermeiden.


Andreas könnte die Forensoftware aber dahingehend ändern, daß an der
Stelle, an der der Hinweis angezeigt wird, daß der Beitrag gepostet
wurde, nach einem Timeout von 1..2 sec automatisch die
Artikelübersichtsseite oder aber der Artikel selbst geladen wird.

Nur hat Andreas vermutlich wichtigeres zu tun, als ständig an der (im
übrigen hervorragenden!) Forensoftware herumzuschrauben ...

von smay4finger. (Gast)


Lesenswert?

Mein Anliegen ist, diese Doppelpostings zu kritisieren, nicht die
Forensoftware insgesamt. Ich bin, bis auf ein paar Macken, sehr
zufrieden. Mit den Macken kann man leben, auch mit den Doppelpostings.
Kritik soll in meinen Augen zu Verbesserungen führen. Wenn Andreas
dafür Zeit hat, schön. Wenn nicht, dann eben nicht.

Selbstdisziplin ist so eine Sache.... :-)

mfg, Stefan.

von Benedikt (Gast)


Lesenswert?

Es gibt übrigends Doppelpostings bei denen Minuten (manchmal sogar eine
halbe Stunde) dazwischen liegt. Und das sind nicht gerade wenig,
zumindest habe ich das schon häufiger gesehen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die sind mir auch schon aufgefallen. Die Ursachen lassen sich ohne
genaueres Kennen der Hintergründe kaum erahnen.
Man sollte mal einen der Mehrfachposter, die das hinbekommen, danach
befragen, was exakt sie da angestellt haben mögen ...
(bevor wir ihnen jetzt allgemeine Idiotie unterstellen)

von Dennis (Gast)


Lesenswert?

Soll ja auch mal vorkommen, daß jemand seinen Rechner zwischendurch
verläßt, um etwas anderes zu machen. Manche Tätigkeiten dauern evtl.
auch mal ne halbe Stunde, und wenn man dann zurückkommt und auf
"zurück" klickt könnte sowas doch passieren.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Oder einfach, um den Thread noch einmal nach oben zu pushen, weil sie
sich ignoriert fühlen

von Peter (Gast)


Lesenswert?

Moderne Tabbed Browsing Browser haben ein Sitzungsmanagement.

Wenn man den Rechner runterfährt und in 3-7 Fenstern 5-30 Tabs offen
hat, werden die nach den Einloggen alle wiederhergestellt und setzen
genau die Requests ab, die zur Anzeige der abgespeicherten URLs nötig
sind.

Jetzt muß man nur noch in einigen der 15-210 Tabs
 * was bestellt haben
 * ein Posting submitted haben
 * irgendeinen anderen POST Request abgesetzt haben
und man postet doppelt, bestellt mehrfach, sperrt sich durch dauerndes
wiedereinloggen mit der falschen SessionID diverse Accounts.

So einfach kann es sein.

<Peter macht ne Abstimmung auf>

Ich vote deshalb aus den Grund daß der Fehler sehr verteilt bei sehr
vielen Menschen und sehr vielen Gelegenheiten liegt, für ein Abstellen
in der Forumssoftware.



</Peter macht ne Abstimmung auf>

von Peter (Gast)


Lesenswert?

Müsste doch ziemlich einfach gehen, wenn man der Tabelle, welche die
Postings hält, eine UNIQUE Spalte mit einer MD5- oder SHA1-Checksumme
über die POST-Parameter, die zu diesem Posting geführt haben, verpasst,
oder? Dann gibt es beim 2 -n ten Submit einen Fehler...

von ___Klaus (Gast)


Lesenswert?

Nein, mann muss einfach nach dem Post ein Redirect machen. Ich kenne
mich da nicht so aus, habe aber mal einen Artikel gelesen, da ging es
darum, nach jedem Post ein Get und Redirect zu machen. Da das Problem
in vielen Foren auftritt, gibt es dazu viele Tutorials.

von Tobias (Gast)


Lesenswert?

Oder einen Timeout einfügen, dass erst nach einer gewissen Zeit ein
neues Posting von einer bestimmten IP erfolgen darf. Würde natürlich
das Problem lösen, wenn mehrere Minuten dazwischen liegen.

von Ingo H. (putzlowitsch)


Lesenswert?

Nee, das einfachste wäre schon so ein Redirect.
Im Antwort-Header einfach z.B. ein

Location: http://www.mikrocontroller.net/forum/read-5-412561.html#new

senden, und man landet man automatisch auf dem gerade eingetragenen
Beitrag.
Auch die Bestätigung, das der Beitrag gespeicher wurde, ist dann nicht
erforderlich, man sieht es ja sofort :-)
Nur im Fehrlerfall sollte natürlich kein Redirect kommen, sondern eine
passende Fehlerbehandlung.

von Peter (Gast)


Lesenswert?

Sauberer ist das mit dem 302 auf den neuesten Beitrag schon, als die
"Ihr Beitrag wurde gespeichert" -Seite.

Sollte auf jeden Fall sein.

Die "Hashsumme pro Beitrag"-Lösung hätte den Vorteil, daß man (auch
als Schad-/SPAM-Software, die ihre POST-Requests selber bastelt und
nicht die Forumssoftware zur Generierung der POST-Requests benutzt)
keinen Betrag absichtlich doppelt absetzen kann, weil dann die DB sich
dann beschwerte, daß genau dieser Beitrag schon da sei.

von Sebastian B. (lufti)


Lesenswert?

In PHP mache ich das bei meinen Seiten immer so, dass ich einfach einen
aktuellen Timestamp mitgebe ..

  <input type="hidden" name="form_timestamp" value="<php echo
time(); ?>

.. und nach abschicken überprüfe, ob in diesem Forum, mit diesem
Betreff und diesem Text schon ein Beitrag vorhanden ist.

Wenn er vorhanden ist, wird der Beitrag nur erstellt, wenn sein
Zeitstempel einen gewissen Wert überschritten hat. z.B 24h

  $save = false;
  if (time() - $_POST['form_timestamp'] > 60*60*24) $save = true;

Somit verhinderst du doppelposts effektiv und kannst trotzdem einen
Thread von vor 2 Jahren neueröffnen.

Leider gibt es da noch die Leute mit Kurbelmodem, die in letzter
Sekunde noch einen Rechtschreibfehler beheben und auf Submit klicken,
nach dem die Formulardaten schon übertragen, die nächste Seite aber
noch nicht gewechselt/geladen wurde.

Die Kannst du aber auch mit dem gleichen Prinzip verhindern!
Da niemand 1min zum Laden deiner Seite benötigt, wohl aber mehr für das
Schreiben eines Threads, stellst du hier eine Post-Pause ein. z.B

  $save2 = false;
  if (time() - $_POST['form_timestamp'] > 60) $save2 = true;

Der Threadschreiber ist nach dem übertragen somit für 60s
schreibgelähmt.

Die ganze Sache stellt überhaupt kein Problem da, .. meines Erachtens.

Grüßchen Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.