Cookie erst nach 2 Reloads gültig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cookie erst nach 2 Reloads gültig

    Kurioses Ding.

    Schreibe mit grade nen Logger.

    Funktionsweise: User kommt auf Seite, Script sucht nach nem Cookie indem ein auf den User weisender Index drin steht, falls vorhanden prüfen ob letzter Reload > timeout, wenn nicht grösser letzten Reload auf aktuelle Uhrzeit stellen, falls ja, neuen Log Eintrag schreiben. Falls noch keine Cookie da ist wird im Logfile anhand der IP gesucht, falls vorhanden Reload updaten UND Cookie setzten, falls nein neuen Log Eintrag und Cookie setzen.

    So und das Problem liegt bei den Cookies. Dieses Log Script rufe ich bei jeder Seite als erstes auf sprich Cookies sollten kein Problem sein. ABER, ich muss 3!! Reloads machen bevor ich das beim ersten mal schon gesetzte Cookie lesen kann. Kann doch nicht sein, oder?

    Also, User kommt auf Seite, neuen Eintrag, Cookie mit Index setzten, über header location gleiche Seite wieder aufrufen, Cookie ist nicht da, also Cookie nochmal setzen und wieder über header location die gleiche Seite wieder aufrufen. Kein Cookie da, über header location gleiche Seite wieder laden UND DANN ist das Cookie plötzlich da.

    Weiss einer was das ist? Cookie setzen ist richtig, es wieder immer die gleiche Syntax benutzt beim Cookie setzen, Domain beim Cookie ist richtig, timeout des Cookies ist richtig.

    Braucht ein Browser irgendwie x Sekunden nach dem Setzen eines Cookies bevor er das aktzeptiert?

    Spricht einer mit mir bitte?

    Gruss,

    der buzz

  • #2
    kann man das mal online sehen. ist in der tat schwer nachvollziehbar.

    Kommentar


    • #3
      Re: Cookie erst nach 2 Reloads gültig

      Original geschrieben von buzz
      Also, User kommt auf Seite, neuen Eintrag, Cookie mit Index setzten, über header location gleiche Seite wieder aufrufen, Cookie ist nicht da
      hast du überprüft, ob der client nach dem header wirklich die seite neu vom server angefordert hat - oder hat er sie vielleicht einfach aus seinem cache genommen ...?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        @TobiaZ:

        Erstmal danke für die schnelle Antwort! Online sehen könntest Du es unter www.derkleinesuperstrolch.de oder meintest Du den Source?

        @wahsaga:

        Ich denke schon dass da nix aus dem Cache kommen kann weil a) ich nen NoCache Header voranstelle und b) ich dem Reload ein Stückchen Query anhänge. Setze dem Query eine Get Variable hinten an die mir sagt zum wievielten mal die Seite neu geladen wurde. Würde ich das nicht tuen und die Seite einfach immer wieder neu laden lassen solange der Cookie gesetzt ist hätte ich bei Leuten die keine Cookies aktzeptieren logischerweise ne Endlos Schleife gebau. Hier die Art wie ich den Cookie setze, man sieht auch das angehangene "clevel" als get was mir halt sagt wievielter Reload. Übrigens auch Dir Danke für die schnelle Antwort!

        PHP-Code:
        header("Expires: 0");
        header("Pragma: no-cache");
        header("Cache-Control: no-cache, no-store, must-revalidate");
        header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
        if(
        ereg("[0-9].[0-9].[0-9].[0-9]",$_SERVER["HTTP_HOST"])) {$domain $_SERVER["HTTP_HOST"];}
        else {
        $domain eregi_replace("www.","",$_SERVER["HTTP_HOST"]); $domain ".".$domain;}
        @
        setcookie ($this->LOGGER_cname,$this->logs[$id][off_id],time()+$this->LOGGER_timeout,"/","$domain");
        $this->debug("setting cookie the first time");
        if ((isset(
        $_SERVER["QUERY_STRING"])) and ($_SERVER["QUERY_STRING"]!="")) {
          
        header ("location: http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"]."&clevel=".($this->clevel+1));}
        else {
          
        header ("location: http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?clevel=".($this->clevel+1));} 
        EDIT:
        by TobiaZ: hab mal die URLs rausgenommen, damit dein Code korrekt dargestellt wird
        Zuletzt geändert von TobiaZ; 21.11.2003, 16:12.

        Kommentar


        • #5
          header ("location: <a href="http://" target="_blank">http://</a>".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"]."&clevel=".($this->clevel+1));

          hast du da wirklich <a href="..."> im header()-befehl drinstehen, oder hat das jetzt das forum beim posten versaut ...?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Nene, das ist beim posten versaut worden. Da steht location: http .... . Übrigens, kurz Erklärung zu dem
            @setcookie ($this->LOGGER_cname,$this->logs[$id][off_id],time()+$this->LOGGER_timeout,"/","$domain");

            $this->LOGGER_cname ist der Name des Cookies
            $this->logs[$id][off_id] ist ein Index, also nur eine Zahl
            $this->LOGGER_timeout ist denke ich klar, default 900 als aktuelle Zeit + 900 Sekunden.

            Ist aber eigentlich auch klar durch die Syntax des setcookie.

            Bis zur nächsten Antwort,

            der buzz

            Kommentar


            • #7
              Kein Antwort mehr heisst keine fällt was ein/auf?

              der buzz

              Kommentar

              Lädt...
              X