Philipp84: Überprüfen, ob Nutzer aus anderer Seite war

Hallo,
folgende Situation:

1. Ein Nutzer kommt auf meine Seite, eine Session wird erstellt, die aktuell aufgerufene Seite wird dort gespeichert

2. Wenn der Nutzer auf meiner Seite weiternavigiert, sich einloggt etc. wird auch all dies gespeichert, soweit so gut

3. Nun beschließt der Nutzer, im gleichen Browserfenster auf eine andere Seite zu gehen, dass darf er natürlich auch

4. Nun das Problem: Wenn er jetzt in eben diesem Browserfenster wieder die URL meiner Seite eingibt, dann sind noch alle Daten der Session von vorhin vorhanden.
Er ist dann allerdings irritiert, da er ja davon ausgeht, dass es so aussehen muss, als wenn er neu auf dieser Seite wäre.
Das Leeren der Session soll aber NUR ausgeführt werden, wenn er in der Zwischenzeit eine andere URL in dem gleichen Browserfenster eingegeben hatte.

Ich habe hier schon viel versucht, um das zu lösen, aber noch nichts vernünftiges gefunden. Hat jemand eine Idee?

  1. Wenn du bezwecken möchtest, dass beim Laden deiner Seite zuerst eventuelle Sessions gelöscht werden, könntest dies du entweder auf der Seite index.php tun und dann bspw. auf die Seite main.php, deine eigentliche Startseite, weiterleiten oder du könntest das Leeren des Session davon abhängig machen, ob das Feld $_SERVER["HTTP_REFERER"] leer ist oder eine URI enthält, die nicht zu deiner Seite gehört.

    1. Hallo,

      habs jetzt über $_SERVER["HTTP_REFERER"] gelöst. Tut, danke. Was dann aber wirklich passiert, muss ich nochmals mit den Nutzern abklären, Danke Martin für den Einwand an dieser Stelle.

  2. Hallo,

    [...]
    4. Nun das Problem: Wenn er jetzt in eben diesem Browserfenster wieder die URL meiner Seite eingibt, dann sind noch alle Daten der Session von vorhin vorhanden.

    natürlich, ich wäre verärgert, wenn das *nicht* so wäre.

    Er ist dann allerdings irritiert, da er ja davon ausgeht, dass es so aussehen muss, als wenn er neu auf dieser Seite wäre.

    Nö, warum? Die Session existiert auf dem Server noch (sie wurde ja nicht explizit gelöscht oder für ungültig erklärt), die Session-ID existiert in der URL oder in einem Cookie auch noch. Das von dir beschriebene Verhalten ist technisch logisch, und es ist exakt das, was ich erwarten würde.

    Wenn ich mich bei ebay einlogge, ein Gebot abgebe, dann zwischendurch mal im SELFForum lese und nach einer halben Stunde wieder zu ebay zurückkehre, dann erwarte ich auch, dass ich noch eingeloggt bin, da ich mich ja nicht abgemeldet habe. Und das funktioniert (Cookie sei Dank) sogar, wenn ich zwischendurch den Rechner ausschalte!

    Das Leeren der Session soll aber NUR ausgeführt werden, wenn er in der Zwischenzeit eine andere URL in dem gleichen Browserfenster eingegeben hatte.

    Und warum solche gemeinen Tricks?

    So long,
     Martin

    --
    Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
      (George Bernhard Shaw)
    1. Hallo,

      ich sehe deine Einwände genauso, aber die Nutzer nicht. Denn diese kamen auf mich zu, dass sie das verhalten so nicht wollen. Nicht ich habe das so gemacht. Wobei ich warscheinlich nicht die ganze Session leeren werde, sondern nur die anzuzeigende Seite auf die home zurücksetzen werde, was ja aber unabhängig, davon ist, wie ich das herausfinde, ich experimentiere aber gerade deswegen mit $_SERVER["HTTP_REFERER"], mal schaun, obs klappt, ich melde mich aber wieder deswegen.

      1. ...ich experimentiere aber gerade deswegen mit $_SERVER["HTTP_REFERER"], mal schaun, obs klappt, ich melde mich aber wieder deswegen.

        Viel herumexpermentieren musst du da eigentlich nicht. Mal angenommen, deine Seite lautet http://www.philipp84.de, könntest du es so machen:

        <?php
            if(!stristr($_SERVER["HTTP_REFERER"], "http://www.philipp84.de"))
            {
                echo "Hey! Da kommt ja einer von außen!";
            }
        ?>

        1. Hi,

          <?php
              if(!stristr($_SERVER["HTTP_REFERER"], "http://www.philipp84.de"))
              {
                  echo "Hey! Da kommt ja einer von außen!";
              }
          ?>

          und was ist mit Besuchern, die keinen Referrer senden? Das ist schließlich keine "Pflichtangabe" - die HTTP-Spec schreibt ihn nicht vor.
          Einige Browser kann man so einstellen, dass sie erst gar keinen Referrer senden, einige Firewalls und Proxies filtern ihn aus dem Request aus, und manche Tools setzen gar irgendeinen Blödsinn in den Referrer-Header.
          Das sollte man bei diesen Überlegungen berücksichtigen. Und dann kommt man zu dem Schluss, dass es sehr gewagt ist, eine funktionell wichtige Entscheidung anhand des Referrers zu treffen.

          Ciao,
           Martin

          --
          F: Was ist ekliger als ein angebissener Apfel mit einem Wurm drin?
          A: Ein angebissener Apfel mit einem halben Wurm.
          1. Fällt dir eine andere Methode ein, zu überprüfen, ob der User die Seite verlassen hat? Du musst bedenken, dass PHP nur serverseitig arbeiten kann.
            Außerdem haben die meisten Leute Referenzen eingeschaltet.
            Wenn der Benutzer die URI manuell in die Adressleiste eingibt, ist das Feld natürlich auch leer. Man kann allerdings davon ausgehen, dass er das nur tut, wenn er auch von außen kommt.

            Vielleicht sollte man die Überprüfung noch mit regulären Ausdrücken machen, da es viele Leute gibt, die das "www." gerne weglassen, was ja auch funktioniert.

            1. Fällt dir eine andere Methode ein, zu überprüfen, ob der User die Seite verlassen hat? Du musst bedenken, dass PHP nur serverseitig arbeiten kann.

              Die MEthode mit index,html und index2.html tut wunderbar, besser als der referrer, habs jetzt so gelöst und bin damit absolut zufrieden

            2. Hallo,

              Fällt dir eine andere Methode ein, zu überprüfen, ob der User die Seite verlassen hat?

              ehrlich gesagt, nein. Und mir will auch beim besten Willen immer noch kein Grund einfallen, warum jemand das feststellen und darauf reagieren will.

              Du musst bedenken, dass PHP nur serverseitig arbeiten kann.

              Ach. Ach was. ;-)

              Vielleicht sollte man die Überprüfung noch mit regulären Ausdrücken machen, da es viele Leute gibt, die das "www." gerne weglassen, was ja auch funktioniert.

              Umgekehrt wird ein Schuh draus: Viele Betreiber von Webseiten finden es anscheinend cool, ein nutzloses "www" vor ihren Hostnamen zu klatschen, obwohl das meist vollkommen überflüssig ist.
              Manche sind wenigstens so schlau und lassen example.org und www.example.org auf dasselbe Server-Verzeichnis zeigen, oder setzen ein Redirect von einer Variante auf die andere.

              Ciao,
               Martin

              --
              Ungeschehene Ereignisse können einen katastrophalen Mangel an Folgen nach sich ziehen.
                (Unbekannter Politiker)
              1. ehrlich gesagt, nein. Und mir will auch beim besten Willen immer noch kein Grund einfallen, warum jemand das feststellen und darauf reagieren will.

                Es gibt schon einen Grund dafür. Nehmen wir das Beispiel Amazon:
                Wenn du später auf Amazon zurückkehrst, bist du noch eingeloggt, aber landest auf der Startseite. Genau das hab ich jetzt so auch umgesetzt.