Session Cookies

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

  • Session Cookies

    Hallo zusammen,

    mein folgender Code Schnippel macht leider überhaupt nicht das was ich davon erwarte.
    PHP-Code:
    session_start();
    if(isset(
    $_COOKIE['PHPSESSID']) === false && isset($_GET['dir']) === false){
        
    //Prüfen ob der Client Cookies akzeptiert
        
    session_write_close();
        
    header('Location: '.$_SERVER['PHP_SELF'].'?dir=re');
        exit;
    }
    elseif(isset(
    $_COOKIE['PHPSESSID']) === false && isset($_GET['dir']) === true){
       
    //Client aktzeptiert keine Cookies. Weiterleitung mit SID
       
    session_write_close;
       
    header('Location: '.$_SERVER['PHP_SELF'].'?'.SID);
       exit;

    Das Problem ist, dass wenn ich das Cookie ablehne, der Server immer wieder ein neues zu setzen versucht und im Code nicht weitergeht. Eigentlich müsste doch ein header() gesetzt werden und eine Weiterleitung erfolgen.
    Nur wenn ich das Cookie akzeptiere geht es im Code weiter.

    Vielleicht habe ich ja auch einen grandiosen Überlegungsfehler drin und jemand kann mir auf die Sprünge helfen.

    Danke und Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

  • #2
    Sicher das $_GET['dir'] an dieser Stelle belegt ist?

    Kommentar


    • #3
      Sicher das $_GET['dir'] an dieser Stelle belegt ist?
      Müsste sie doch sein, denn dem header hänge ich diese Var im ersten Fall ja an. Und im zweiten Fall müsste sie dann doch gesetzt sein.
      Wie gesagt, die erste Weiterleitung funzt nur, wenn ich Cookies aktzeptiere. Wenn nicht, dann bleibt das Script beim Cookie setzen stehen.

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Und wenn du es ohne doppelte weiterleitung machst?

        PHP-Code:
        session_start();
        if(isset(
        $_COOKIE['PHPSESSID']) === false){
           
        header('Location: '.$_SERVER['PHP_SELF'].'?'.SID);

        Edit: Wozu eigentlich der Aufwand? Machen doch alle(?) Browser automatisch oder nicht?
        Zuletzt geändert von Ueps; 12.10.2005, 13:41.

        Kommentar


        • #5
          Irgendwie ist das gesamte Konstrukt sinnfrei.

          Die Bedingung "Cookie gesetzt" ist entweder wahr oder falsch.
          Die Bedingung "Parameter übergeben" ist entweder wahr oder falsch.

          Die Weiterleitung machst du nur dann, wenn Bedingung 1 nicht erfüllt ist, also kein Cookie gesetzt.

          Die zweite Bedingung hättest du dir schenken können, sie ist nämlich irrelevant.
          Warum?

          Du sagst: Cookies werden geblockt
          Schlussfolgerung: Bedingung 1 im if und Bedingung 1 im elseif sind beide erfüllt

          Fall 1: $_GET['dir'] ist nicht gesetzt
          Aktion: Weiterleiten und $_GET['dir'] setzen, ein Cookie wird trotzdem nicht gesetzt

          Fall 2: $_GET['dir'] ist gesetzt
          Aktion: Weiterleiten und SID anhängen, ein Cookie wird trotzdem nicht gesetzt und $_GET['dir'] ist auch nicht mehr gesetzt

          ----------
          Frage: Wo bitte soll denn $_COOKIE['PHPSESSID'] gesetzt werden?
          Antwort: Nirgends, denn du blockst Cookies ja

          Frage: Wie willst du aus der Umleiterei rauskomen?
          Antwort: Du bist dran
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Es macht mehr oder weniger Sinn, wenn man wissen möchte, ob Cookies akzeptiert wurden oder nicht... aber das wäre auch mit weit aus weniger aufwand zu erzielen.

            Kommentar


            • #7
              Wozu eigentlich der Aufwand? Machen doch alle(?) Browser automatisch oder nicht?
              Weil ich wissen möchte ob die Session in einen Cookie gespeichert wurde oder als URL-Anhängsel weitergegeben werden sollte.
              Und $_COOKIE ist eben erst gesetzt wenn die Seite erneut aufgerufen wird und der Client das Cookie auslesen lässt.

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Wenn keine Cookies gesetzt wurden, wird die ID aber automatisch angehängt oder ? Bitte zerstöre nicht meine kleine heile Welt =)

                Kommentar


                • #9
                  Frage: Wo bitte soll denn $_COOKIE['PHPSESSID'] gesetzt werden?
                  imho wird das Cookie bei session_start() gesetzt. Und nach einem erneuten Aufruf der Seite ergibt var_dump($_COOKIE['PHPSESSID']) einen Wert. Der Name des Cookies ist PHPSESSID (so zumindest zeigt es mir die Cookieverwaltung des Browsers an).
                  Das mit den Weiterleitungen muss ich mir mal noch genauer anschauen. Ich wollte eben nur sicher sein, ob die Session in einem Cookie gespeichert wurde oder ob ich sie anhängen muss.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Ich wollte eben nur sicher sein, ob die Session in einem Cookie gespeichert wurde oder ob ich sie anhängen muss.
                    Das macht php i.d.r von ganz alleine ...
                    h.a.n.d.
                    Schmalle

                    http://impressed.by
                    http://blog.schmalenberger.it



                    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                    ... nur ohne :-)

                    Kommentar


                    • #11
                      Das Problem besteht nur auf der index.php. Bei allen folgenden Seiten wird das Cookie ja mitgeschickt.
                      Ich hatte gestern mal folgendes probiert:
                      Cookie aktzeptiert und geschaut ob SID angehängt oder nicht. Und die SID wurde angehängt (auf der index.php), weil eben nicht geprüft werden kann, ob ein Cookie gesetzt wurde ohne einen neuen Request auf die Seite.
                      Mein Prob ist also, dass die SID auf der ersten Seite auch dann angehängt wird, wenn ich das Cookie annehme. Drum die Weiterleitungen um sicher zu sein, dass das Cookie gesetzt wurde.

                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Re: Session Cookies

                        Original geschrieben von jahlives
                        Das Problem ist, dass wenn ich das Cookie ablehne, der Server immer wieder ein neues zu setzen versucht und im Code nicht weitergeht.
                        works as designed

                        Dein Code:

                        WENN kein_cookie UND kein_parameter_x
                        neuladen der seite und parameter_x anhängen
                        SONST WENN kein_cookie UND parameter_x
                        neuladen der seite und parameter_y anhängen

                        Wenn du das Cookie (immer) ablehnst, wird daraus:
                        WENN kein_parameter_x
                        neuladen der seite und parameter_x anhängen
                        SONST WENN parameter_x
                        neuladen der seite und parameter_y anhängen

                        Wie bitte soll er also im Code weitergehen?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Besser wäre:
                          PHP-Code:
                          session_start();
                          $name session_name();

                          if (!isset(
                          $_COOKIE[$name]) and !isset($_GET[$name])) {
                          //Erster Aufruf
                            
                          $location 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].
                                        
                          '?cookiecheck=1&'.SID;
                            
                          header('location: '.$location);
                            die();
                          }

                          if (isset(
                          $_GET[$name]) and isset($_GET['cookiecheck'])) {
                          //Zweiter Aufruf
                            
                          $location 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
                            if (!isset(
                          $_COOKIE[$name])) {
                            
                          //SID anhängen
                              
                          $location .= '?'.SID;
                            }
                            
                          header('location: '.$location);
                            die(); 
                          }

                          if (isset(
                          $_COOKIE[$name])) {
                            echo 
                          'Sie akzeptieren Cookies.<br />Ihre Session-ID: '.session_id();
                          } else {
                            echo 
                          'Sie akzeptieren keine Cookies.<br />Ihre Session-ID: '.session_id();

                          Aber wozu du den ganzen Aufwand betreiben willst...
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Danke erstmal @ happi, dass du dir die Zeit genommen hast den Code anzupassen. Ich habe es gestern dann noch so gelöst, dass ich beim ersten Aufruf eine Session Var kreiere auf die ich dann beim zweiten Aufruf prüfen kann (somit weiss ich, dass der User von der index.php her kommen sollte). Vor der 2. Weiterleitung setze ich diese Var dann auf ''. Und da die leere Session Var ja als gesetzt gilt(isset gibt true), kann ich beim erneuten Aufruf verhindern, dass es eine Endlosweiterleiterei gibt.

                            Danke und Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar

                            Lädt...
                            X