Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Session-Variable wird nicht richtig gesetzt

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Session-Variable wird nicht richtig gesetzt

    Hallo!

    Ich habe ein Problem mit einer Session-Variable bzw. einer darauf basierenden If-Abfrage. Konkret handelt es sich um einen auf einem bekannten Tutorial basierenden Counter.

    Ich habe diesen schon einmal verwendet (auf anderem Webspace, eingebunden in eine andere Seite eingebunden), da funktionierte er noch. Dies ist nun nicht mehr der Fall oO Ich komme auch nach elend langem Tüfteln einfach nicht hinter den Fehler...

    Für Hilfe wäre ich sehr dankbar

    Hier der Code:

    PHP-Code:
    //Session starten und für eine Stunde setzen
    session_set_cookie_params(3600);
    session_start(); 

    //Textdatei in der der Counterstand abgespeichert wird öffnen und auslesen
    $datei fopen("page/counter.txt","r+");
    $counterstand fgets($datei10);

    if(
    $counterstand == "")
       {
       
    $counterstand 0;
       }

    // Wenn die Seite innerhalb der letzten Stunde besucht wurde, ist diese Session-Variable mit Inhalt gefüllt und es passiert: Nix. 
    //War man nicht auf der Seite: Session-Variable ist leer, Counter wird erhöht und Session-Variable wird fürs nächste mal mit Inhalt gefüllt
    if($_SESSION['aktiv'] == '')
       {
       
    $counterstand++;
       
    rewind($datei);
       
    fwrite($datei$counterstand);
       
    $_SESSION['aktiv'] = 'aktiv';
       }

    //Ausgabe
    echo '<div id="counter">';
    echo 
    "Anzahl bisheriger Besucher: <b>".$counterstand."</b>";
    echo 
    '</div>';
    fclose($datei); 
    P.S.: Ich vergaß zu erwähnen, wo das eigentliche Problem liegt Es ist so: Der Counter erhöht sich schlicht bei jeder Aktualisierung. Die IF-Abfrage kommt also stets zu dem Ergebnis, dass die Variable $_SESSION['aktiv'] leer ist.

    P.P.S.: Man verzeihe mir den uneinheitlichen Gebrauch von Anführungszeichen und Hochkommata..

  • #2
    PHP-Code:
    var_dump($_SESSION); 
    ?

    Warum müssen die Leute eigentlich immer irgendwelche Strings als bool missbrauchen?

    BTW: Mit file_get_contents und file_put_contents hättest du dir vieles sparen können.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Wat?

      Im Tut wars sogar eine Bool-Variable, aber das ist doch für die Funktionalität recht egal, oder nicht? Und so wie ich das sehe, gilt das selbe für die beiden zuletzt von dir empfohlenen Befehle. Einfacher: Ja. Funktionsänderung: Nein.

      Also wo kann der Fehler liegen?

      Kommentar


      • #4
        Zitat von Olduwai Beitrag anzeigen
        aber das ist doch für die Funktionalität recht egal, oder nicht?
        Ja, nur dass es Sinnlos ist.

        PHP-Code:
        <?php
        //Session starten und für eine Stunde setzen
        session_set_cookie_params(3600);
        session_start(); 

        //Textdatei in der der Counterstand abgespeichert wird öffnen und auslesen
        $counter file_exists("page/counter.txt")?file_get_contents("page/counter.txt"):0;

        if(!isset(
        $_SESSION['aktiv']) || !$_SESSION['aktiv'])
        {
           
        file_put_contents("page/counter.txt", ++$counter);
           
        $_SESSION['aktiv'] = true;
        }

        //Ausgabe
        echo '<div id="counter">';
        echo 
        "Anzahl bisheriger Besucher: <b>".$counter."</b>";
        echo 
        '</div>';
        E: 2 kleine Fehler.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #5
          Ja so funktioniert es genauso wie vorher...nur, dass der Counter-Stand immer noch bei jeder Aktualisierung erhöht wird

          Kommentar


          • #6
            Hab ne Klammer vergesssen, nehme an, die hast du selbst gefunden.

            Zitat von tkausl Beitrag anzeigen
            PHP-Code:
            var_dump($_SESSION); 
            ?
            Noch keine Antwort darauf.
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von Olduwai Beitrag anzeigen
              Im Tut wars sogar eine Bool-Variable, aber das ist doch für die Funktionalität recht egal, oder nicht? Und so wie ich das sehe, gilt das selbe für die beiden zuletzt von dir empfohlenen Befehle. Einfacher: Ja. Funktionsänderung: Nein.
              Leuchtet dir der Zusammenhang dabei nicht ein? Wenn du eine Uhr in der Küche willst hängst du dir ja auch ne Wanduhr hin, und setzt nicht nen Rechner mit Betriebssystem & Co. auf um die Uhrzeit anzuzeigen. Warum? Überleg einfach mal was dabei schief laufen kann:
              - bei einer mechanischen Wanduhr: Batterie leer oder Zahnrädchen verklemmt.
              - bei der PC-Lösung: ALLES.

              Analog dazu verhält es sich hier. (Unnötige) Komplexität wird nirgends empfohlen.

              Kommentar


              • #8
                Natürlich leuchtet es mir ein und ich habe eben auch die vereinfachte Variante eingesetzt.

                Aber das geht alles an der eigentlichen Frage vorbei. Ich brauche Hilfe bei der Funktionalität des Counters und keine Belehrungen über Code-Komplexität.

                No Offense, aber ein klitzekleines Bisschen nervt es dann doch.

                Kommentar


                • #9
                  Das wir aber vielleicht nicht komplizierte Lösungen debuggen wollen, wenn es einfache auch gibt hast du dir auch überlegt?

                  Ansonsten gibst du ja auch immer noch nicht die wichtigen Informationen zum Debugging - die Ausgabe von var_dump() auf die dich tkausl schon in #2 hingewiesen hat.

                  Kommentar


                  • #10
                    Ey! Ich habe doch gerade gesagt, dass ich die vereinfachte Lösung bereits eingesetzt habe. Und vorher kannte ich die vereinfachenden Befehle halt nicht. Ende.

                    var_dump gibt vor If-Abfrage NULL aus (bei jeder Aktualisierung, also wird $_SESSION['aktiv'] anscheinend bei jedem Reload gelöscht) und nach der Schleife true (also wird die Variable korrekt auf true gesetzt, was aber nur bis zur nächsten Aktualisierung hält).

                    Kommentar


                    • #11
                      Zitat von Olduwai Beitrag anzeigen
                      var_dump gibt vor If-Abfrage NULL aus (bei jeder Aktualisierung, also wird $_SESSION['aktiv'] anscheinend bei jedem Reload gelöscht) und nach der Schleife true (also wird die Variable korrekt auf true gesetzt, was aber nur bis zur nächsten Aktualisierung hält).
                      Ich wollte den var_dump von $_SESSION, nicht den von $_SESSION['aktiv'].

                      Wird denn ein Cookie gesetzt?
                      [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                      Kommentar


                      • #12
                        Achso, ja hier ist das Ergebnis von var_dump($_SESSION): array(1) { ["aktiv"]=> bool(true) } (Nach der If-Abfrage, vorher ebenfalls NULL)

                        Wie kann ich denn testen, ob ein Cookie gesetzt wurde? Mit $_COOKIE['cookiename'] oder so arbeite ich ja gar nicht.

                        Edit: var_dump($_COOKIE) ergibt jedenfalls array(0) { }.

                        Kommentar


                        • #13
                          Zitat von Olduwai Beitrag anzeigen
                          Achso, ja hier ist das Ergebnis von var_dump($_SESSION): array(1) { ["aktiv"]=> bool(true) } (Nach der If-Abfrage, vorher ebenfalls NULL)
                          Normalerweise sollte in $_SESSION ein leeres Array sein, wenn die Session korrekt gestartet wurde.
                          Zeig mal:
                          PHP-Code:
                          var_dump(isset($_SESSION)); 
                          NACH dem starten der Session aber VOR dem setzen des bools.
                          Ansonsten mal in den Error-Log schauen.
                          [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                          Kommentar

                          Lädt...
                          X