Christian Menne: "Zurück"-Funktion im Browser sperren

Hallo alle!

Mein Servlet, das mehrfach per HttpServletRequest und -Response mit einem Benutzer kommuniziert, reagiert verständlicherweise allergisch auf die Benutzung der "Zurück"-Funktionen der Browser (Dateninkonsistenz etc.).

Weiß jemand, wie man das unterbinden kann?

Gruß,
christian

  1. Hallo,

    Weiß jemand, wie man das unterbinden kann?

    Gar nicht, mit JavaScript einem User im Browser rumzupfuschen
    geht nicht gut. Es fängt schon beim deaktivieren der rechten Maustaste an was theoretisch möglich ist und hört beim Zurückbutton auf. Es geht schlichtweg nicht.
    Selbst wenn, was würdest du machen, wenn JavaScript deaktiviert ist?

    Das die Zurück Funktion manchmal zu problemen füren kann ist bekannt,
    du hast daher auch ein paar möglichkeiten. Eine wäre, dein Servlet nochmal so zu überarbeiten das es bei einem zurück nicht zu Fehlern kommt, sprich z.B. doppelte Bestellungen (bei Warenkörben) abfragen und ggf. zu filtern.

    Gruß

    ueps

  2. Hallo,

    Mein Servlet, das mehrfach per HttpServletRequest und -Response mit einem Benutzer kommuniziert, reagiert verständlicherweise allergisch auf die Benutzung der "Zurück"-Funktionen der Browser (Dateninkonsistenz etc.).

    Das es _verständlicherweise_ auf den Zurückbutton so reagiert, ist mir nicht ganz klar.
    Wenn ja dann liegt in der Programmierung Deines Servlets was im argen. Bei sauberer Implementierung (zentrale "Businesslogik" mit Views und sauberen Datenflusswegen) gibt es i.d.R. keine Probleme.

    Nicht nur das das sperren des Zurückbuttons nur ein überdecken anderer Probleme ist, sondern es nimmt den Benutzer auch die gewohnte Funktionalität des Browsers.

    Gruss
       MichaelB

    1. Das es _verständlicherweise_ auf den Zurückbutton so reagiert, ist mir nicht ganz klar.
      Wenn ja dann liegt in der Programmierung Deines Servlets was im argen. Bei sauberer Implementierung (zentrale "Businesslogik" mit Views und sauberen Datenflusswegen) gibt es i.d.R. keine Probleme.

      Das Problem ist, daß es sich um eine Großrechneranwendung handelt, deren GUI durch einen Webclient ersetzt werden soll. Dieser wird über ein Servlet realisiert.
      Da die Ausführung dieser Anwendung auf streng reglementierten "Steps" beruht, die aufeinander aufbauen und mit jedem Request aufgerufen werden, werden Requests, die beim Betätigen des "Zurück"-Buttons hereinkommen, zu einem Wiederspruch in den aktuell vorliegenden Datensätzen führen. Ist ziemlich schwer zu verstehen - ich kommuniziere auch nur ausschließlich mit dem Interface, was dahinter passiert, ist mir egal.

      Nicht nur das das sperren des Zurückbuttons nur ein überdecken anderer Probleme ist, sondern es nimmt den Benutzer auch die gewohnte Funktionalität des Browsers.

      s. o.: die ist auch gar nicht weiter erwünscht.

      1. Hallo,

        Da die Ausführung dieser Anwendung auf streng reglementierten "Steps" beruht, die aufeinander aufbauen und mit jedem Request aufgerufen werden, werden Requests, die beim Betätigen des "Zurück"-Buttons hereinkommen, zu einem Wiederspruch in den aktuell vorliegenden Datensätzen führen. Ist ziemlich schwer zu verstehen - ich kommuniziere auch nur ausschließlich mit dem Interface, was dahinter passiert, ist mir egal.

        Ok, dann muss das Servlet halt überwachen wo man gerade steht (in einem Statusobjekt). Die Servlet-API bietet ja gute Möglichkeiten zum Session-Management. Wenn man in einem Status-Objekt speichert, was in der bisherigen Session geschah, dann kann man ja entsprechend reagieren und das Abfangen. Bzw. auch bei abgebrochenen Sessions (was ja ebenfalls passieren kann) ein Rollback fahren.
        Zudem würde ich die eigentliche Webanwendung (sprich das Servlet) von den darunterliegenden Prozessen so weit wie möglich entkoppelt. Wenn also mehrere Seiten hinterander aufgerufen werden das die Schritte zwischen gespeichert werden und dann zum Schluss in einem Rutsch durchgeführt werden. Geht natürlich nicht an den Stellen, wo der Verlauf von der Antwort der Großrechneranwendung abhängig ist. Aber vielleicht geht das zumindest stellenweise.
        Ansonsten empfielt sich wie gesagt die Sache mit dem Session-abhängigen Status-Objekt.

        Aber um zur Ursprungsfrage zurückzukommen. Ich kenne keinen Weg den Zurückbutton zu sperren.

        Gruss
           MichaelB

        1. Ok, dann muss das Servlet halt überwachen wo man gerade steht (in einem Statusobjekt). Die Servlet-API bietet ja gute Möglichkeiten zum Session-Management. Wenn man in einem Status-Objekt speichert, was in der bisherigen Session geschah, dann kann man ja entsprechend reagieren und das Abfangen. Bzw. auch bei abgebrochenen Sessions (was ja ebenfalls passieren kann) ein Rollback fahren.

          So etwas ähnliches tue ich im Moment auch, aber ich möchte mich nicht unbedingt auf diese Daten verlassen. Aber das gehört in ein anderes Forum. Danke soweit.

          Aber um zur Ursprungsfrage zurückzukommen. Ich kenne keinen Weg den Zurückbutton zu sperren.

          Das kann ich verstehen. Ich war mir selber nicht sicher, ob das geht.
          Aber man kann doch sicher wenigstens die Navigationsleiste aus dem Browser "entfernen", oder? Das würde auch dem entsprechen, was Marketing haben möchte... :-)

          1. Hi Michael,

            Aber um zur Ursprungsfrage zurückzukommen. Ich kenne keinen Weg den Zurückbutton zu sperren.
            Das kann ich verstehen. Ich war mir selber nicht sicher, ob das geht.
            Aber man kann doch sicher wenigstens die Navigationsleiste aus dem Browser "entfernen", oder? Das würde auch dem entsprechen, was Marketing haben möchte... :-)

            Es gibt schon bei dem einen oder anderen Browser die Möglichkeit, die Navigationsleiste auszublenden. ABER:

            • dann sind auch andere, vielleicht hilfreiche Funktionen futsch (Drucken, Abbrechen, Refresh, ...),
            • das funktioniert nicht mit jedem Browser und jeder Plattform,
            • das verärgert manche Anwender / Kunden, wenn man ihm die gewohnte Navigation wegnimmt. Erst recht, wenn er nicht weiß, wie er sie wieder hinbekommt, um auf andere Websites zu gehen.

            Kurzum: Bitte bitte nicht mit solchen Tricks arbeiten! Die Plattform Internet / Intranet hat nunmal ihre eigenen Regeln, an die die Anwendung angepaßt werden muß und nicht umgekehrt. Mach das bitte auch eurem Marketing klar!

            Ich weiß, daß dies nicht so einfach und vieles bei Großrechneranwendungen besser zu behandeln ist. Das sind die Opfer, die die große bunte Internetwelt von den seriösen Großrechneranwendungen fordert...

            Heiko