SESSION Problem mit Safari / Opera

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Also habs nochmal mit Safari getestet - kein Erfolg.
    Mich wundert ja das es beim googlen einige englischsprachige Beiträge zu dem Thema gibt (Safari Back button not honouring PHP logout session - Stack Overflow aber auch da leider keine Lösungen...

    Kann doch nicht sein , klappt bei anderen Seiten auch ...
    "I don't want to belong to any club that would accept me as a member."

    Groucho Marx

    Comment


    • #17
      Das Prinzip ist dir aber schon klar oder?
      Beim Login setzt du ein Session Cookie. Der Browser schickt das bei jedem weiteren Request mit. Als Antwort bekommt er von dir immer eine Seite mit dem Hinweis "darf gecacht werden". Beim Logout weist du den Browser an, das Session Cookie zu löschen und diese eine Seite nicht zu cachen.
      Aber die früheren Seiten verbleiben im Cache - jedenfalls bei Safari. Andere Browser erkennen evtl. dass das zu löschende Session Cookie auch zu anderen Seiten im Cache gehört und löschen diese. Safari eben nicht. Völlig legitim, denn es gibt keine Vorschrift, keinen Standard, der das verlangt.

      Die einzige Lösung des Problems "Seiten werden aus Cache geladen" ist, das Caching von vornherein zu verbieten. Also immer wenn ein User eingeloggt ist, solltest du Header senden, die das Caching verbieten.
      Welche Header das sind, kann man überall im Netz nachlesen, z.B. im Manual zu header (Beispiel #2, beachte auch den Hinweis darunter).

      Comment


      • #18
        Als Antwort bekommt er von dir immer eine Seite mit dem Hinweis "darf gecacht werden".
        Na ich sende doch immer als erstes header die das cachen unterbinden sollen

        Das von dir genannte Beispiel #2 aus header war ja mein Ausgangspunkt .....

        Habe gerade nochmal
        PHP Code:
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit 
        aus deinem Beispiel im Code eingesetzt, Safari zurückgesetzt (Caches leeren & Cookies Löschen) und neu ihn gestartet:
        Die Entwickler Tools zeigen mir folgendes:
        PHP Code:
        Cache-Control:no-storeno-cachemust-revalidatepost-check=0pre-check=0no-storeno-cachemust-revalidate
        Connection
        :Keep-Alive
        Content
        -Encoding:gzip
        Content
        -Length:930
        Content
        -Type:text/htmlcharset=UTF-8
        Date
        :Thu06 Jan 2011 16:47:29 GMT
        Expires
        :Thu19 Nov 1981 08:52:00 GMT
        Keep
        -Alive:timeout=1max=100
        Pragma
        :no-cache
        Server
        :Apache
        Vary
        :Accept-Encoding
        X
        -Powered-By:PHP/5.2.12-nmm2 
        und session_cache_limiter(); gibt mir nocache - aber er holt immer noch Seiten aus dem Cache *seufz*

        Wie gesagt - es wird ja auch nur eine seite (index.php) aufgerufen und dann der Content included - und ganz oben (direkt nach error_reporting(E_ALL) stehen meine header();
        "I don't want to belong to any club that would accept me as a member."

        Groucho Marx

        Comment


        • #19
          Originally posted by mcmurphy View Post
          Habe gerade nochmal
          PHP Code:
          header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
          header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit 
          aus deinem Beispiel im Code eingesetzt, Safari zurückgesetzt (Caches leeren & Cookies Löschen) und neu ihn gestartet:
          Die Entwickler Tools zeigen mir folgendes:
          PHP Code:
          Cache-Control:no-storeno-cachemust-revalidatepost-check=0pre-check=0no-storeno-cachemust-revalidate
          ...
          Expires:Thu19 Nov 1981 08:52:00 GMT 
          Wieso kommen bei Safari ganz andere als die von dir gesendeten Header an? Kann es sein, dass du weiter unten im Script nochmal andere Header setzt oder rufst du sogar ein ganz anderes Script auf?

          Comment


          • #20
            das wird mir durch session_start ausgegeben.
            Habe mal alle Header und session_start auskommentiert, dann bekomme ich
            PHP Code:
            Cache-Control:no-cachemust-revalidate
            Connection
            :Keep-Alive
            Content
            -Encoding:gzip
            Content
            -Length:895
            Content
            -Type:text/html
            Date
            :Thu06 Jan 2011 17:48:41 GMT
            Expires
            :Sat26 Jul 1997 05:00:00 GMT
            Keep
            -Alive:timeout=1max=100
            Server
            :Apache
            Vary
            :Accept-Encoding
            X
            -Powered-By:PHP/5.2.12-nmm2 
            als Antwort

            mit Session_start dann:
            Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0



            habe ich anscheinend mal wieder was zum googeln
            Und hier mein Ergebniss:
            Laut http://php.net/manual/de/function.session-start.php unter Anmerkungen:
            In Abhängigkeit von der Konfiguration sendet diese Funktion verschiedene HTTP-Header. Siehe session_cache_limiter() um diese Header anzupassen,
            und in http://de2.php.net/manual/de/functio...he-limiter.php
            Dann unter User Contributed Notes:
            FALSE parameter disables any automatic cache limiter
            In this case no additional headers are sent

            <?php
            session_cache_limiter( FALSE );
            ?>
            Dann sendet mein Script nur die in header(); angegeben caching anweisungen - aber nach erstem Test ohne Erfolg (in meinem Sinne....)
            Last edited by mcmurphy; 06-01-2011, 18:05. Reason: gegoogelt..
            "I don't want to belong to any club that would accept me as a member."

            Groucho Marx

            Comment


            • #21
              HAbe jetzt nochmal nen test gemacht:
              2 Dateien, index.php & index2.php mit folgenden Inhalt:
              PHP Code:
              <?php
                  header
              ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
                  
              header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
              ?>
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd"> 
              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
              <head>
                <title>test 1</title>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
              </head>
              <body>
              <?php    echo time(); ?>
              <br />
              <a href="index2.php">nach 2</a>
              </body>
              </html>
              sind identisch bis auf <a href="index2.php">nach 2</a>, da steht in Index2.php natürlich als Ziel index.php drin

              Safari ignoriert einfach die Cache Anweisungen...
              Überlege mir morgen was - wenn einer ne Vorschlag für einen Würgaround hat....
              "I don't want to belong to any club that would accept me as a member."

              Groucho Marx

              Comment


              • #22
                So, wenn einen des Rätsels Lösung interessiert:
                Safari & Opera reagieren auf die caching Header nur bei einer https Verbindung.

                aus:
                php - CodeIgniter session issue on Opera and Safari - Stack Overflow

                Short answer: the only way to prevent Opera from using cache on history navigation (back/forward button) is to serve the page over https with Cache-control: must-revalidate header.
                "I don't want to belong to any club that would accept me as a member."

                Groucho Marx

                Comment

                Working...
                X