Doppelbeiträge

Persönliche Seite #413436
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 ...
Gast #413437
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.
Gast #413440
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.
Gast #413442
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>
Gast #413443
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...
Gast #413444
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.
Gast #413445
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.
#413446
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.
Gast #413447
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.
#413448
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren