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

  • Olduwai
    hat ein Thema erstellt [Erledigt] Session-Variable wird nicht richtig gesetzt.

    [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..

  • tkausl
    antwortet
    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.

    Einen Kommentar schreiben:


  • Olduwai
    antwortet
    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) { }.

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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?

    Einen Kommentar schreiben:


  • Olduwai
    antwortet
    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).

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    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.

    Einen Kommentar schreiben:


  • Olduwai
    antwortet
    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.

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    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.

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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.

    Einen Kommentar schreiben:


  • Olduwai
    antwortet
    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?

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X