Hallo Andreas, wie kommen eigentlich die ganzen Doppel-Beiträge zustande? Kann man das nicht irgendwie verhindern? mfg, Stefan.
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 ...
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.
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.
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)
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.
Oder einfach, um den Thread noch einmal nach oben zu pushen, weil sie sich ignoriert fühlen
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>
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...
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.