Session lässt sicht nicht beschreiben oder löschen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Session lässt sicht nicht beschreiben oder löschen

    Hallo zusammen,

    ich hab mal wieder ein kleine sProblem, diesmal mit $_SESSION.

    Wenn ich beim login die $_SESSION['eingeloggt'] mit = TRUE; beschreiben will, funktioniert das nicht, ebenso wenig, wenn ich die Session mit unset($_SESSION['eingeloggt']); wieder löschen will.
    Wie löschen? Lässt sich doch garnicht beschrieben?
    Doch. Komischerweise, wenn ich ich in die datei ucp.php (login/logout wird aufgerufen mit ucp.php?lang=de&do=login/logout und wird per include die jeweilige datei einberufen) reinschreibe $_SESSION['eingeloggt'] = TRUE;, dann ist die Session beschrieben. Wenn ich das jetzt rauslösche und danach auf Logout gehe, wird diese Session aber nicht gelöscht. Andersrum ist es genauso beim Login.

    Da an den Scripts ca. 10 dateien hängen, hab ich jetzt mal alles hochgeladen, für die, die es interessiert und mir helfen wollen: fipsii.de/fisw.rar

    Vielen Dank schonmal

    P.S.: Mein Script ist noch laaaaaange nicht fertig, bin aber für anderwetige Tipps immer offen;);)
  • Mache mal ein ERROR_REPORTING(E_ALL);, ggf. dazu ein ini_set("display_errors", true) in die erste Zeile von jeder Datei, die du aufrufst. Dann solltest du zumindest für die ersten Fehler eine Fehlermeldung erhalten.

    Verstehe das zweite ehrlich gesagt nicht. Meinst du, dass die Session nur während der Scriptlaufzeit gilt, und nach einem neuen Seitenaufruf nicht mehr befüllt ist?
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • session_start(); hab ich ja, also in der index.php und ucp.php, wenn ich sie bei den anderen rienmach, sagt der, die läuft schon

    erstes hab ich schon - bringt nix, wird nix angezeigt

    zweitens: japp, das mien ich, wenn ich login, bzw. logout aufrufe.
    wenn ich jez aber so in die index.php, bzw. ucp.php reinschrieb und dann wieder rauslösch, dann lassen die sich nicht überschreiben, bzw, löschen
  • In dem Code, den du hochgeladen hast, steht nur ein error_reporting() - da fehlt in den Klammern das E_ALL.
    Packe das mal vor das session_start() - ggf. geht schon beim Starten was schief.


    wenn ich jez aber so in die index.php, bzw. ucp.php reinschrieb und dann wieder rauslösch, dann lassen die sich nicht überschreiben, bzw, löschen

    Wenn du was wo reinschreibst lässt sich was nicht mehr löschen?!

    Schreibe sonst mal ein var_dump($_SESSION); nach dem session_start(). Dann wird dir der Inhalt der Session direkt am Anfang angezeigt, und du siehst, ob die Session denn wirklich geschrieben wird, oder es nur die aktuelle Variable ist.
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • also wenn ich aus error_reporting(); error_reporting(E_ALL); mach, kommt das selbe raus...
    (steht jetzt vor dme session_start();, abe rich dachte, das muss eben an erster stelle stehen, damit das funzts? hab cih zumindest mal gelesen)

    ich schrieb schon die ganze zeit immer print_r($_SESSION); rein, bringt mir das selbe wie var_dump($_SESSION);: Jetzt, nachdem ich meinen PC neu hochgefahren habe: Array ( )
    Wenn ich jetzt allerdings in die datei index.php, oder ucp.php unter das session_start(); schreibe "$_SESSION['eingeloggt'] = TRUE;", dann steht bei print_r($_SESSION);: "Array([eingeloggt] => 1). Wenn ich jetzt auf logout geh, dann wird diese session aber nicht gelöscht, obwohl das ja mit unset($_SESSION); passieren sollte. Also wird nicht umgeschrieben (nachdem ich das $_SESSION['eingeloggt'] = TRUE; natürlich wieder auskommentiert habe). Jetzt das selbe mit $_SESSION['eingeloggt'] = FALSE;: Wenn ich das anstelle des vorherigen TRUEs schreibe, ändert sich das, print_r($_SESSION); spuckt aus: Array([eingelogtt] => ), wenn ich das wieder auskommentiere und dann mich einloggen will, dann bleibt es aber trotzdem noch auf FALSE.

    Ergo:

    Er behält nur das, was ich direkt in index.php, bzw. ucp.php reinschreibe, und das, was mit login, bzw., logout überschrieben wird, interessiert ihn wohl nicht (genauer gesagt, für dieses eine mal die seite schon, aktualisiere ich wieder, is es wieder weg).
  • Also ne Session gilt nur für eine Browsersitzung -> nach Neustart ist eh alles weg.

    Du könntest zum Löschen der Session mal session_destroy() benutzen.

    session_start() mus snicht als erstes im Code stehen, nur VOR der ersten Ausgabe, da ansonsten der Session-Cookie nicht mehr gesetzt werden kann.
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • Also ich habs mal ausprobiert, mit session_destroy(); funktionierts problemlos. Allerdings habe ich einen Einwand: Dabei werden ALLE Sessions gelöscht, aber es sollen auch welche bestehen bleiben. Wenn ich jetzt session_destroy(['eingeloggt']); zum Beispiel reinschreib, dann gibt er mir den Fehler aus, dass er keinen Parameter annimmt. Gibts irgendeinen Trick, dass nicht alle gelöscht werden?

    Und jetzt besteht immenroch das Problem mit der session beschreiben: Ich hab mal ewig viel rumgeschrieben und bin zu einem ergebnis gekommen:
    Diese zwei Sessions ($_SESSION['eingeloggt'], $_SESSIOn['id']) scheinen wohl immer nur für diesen einen Aufruf verfügbar zu sein. Ich habe in die letzte Zeile vor dem ?> von der datei ucp.php print_R($_SESSION); reingeschrieben: Die eingegebenen Inhalt sind da. Über den link bin ich dann in die Datei index.php gegangen, in deren ersten Zeilen steht:
    "<?php
    error_reporting(E_ALL);
    session_start();
    print_r($_SESSION);"
    Raus kommt: "Array()"
    Wenn ich jetzt allerdings in die dateien index.php bzw. ucp.php reinschreibe: $_SESSION['eingeloggt'] = TRUE;, dann behält er das.
    Ich weiß nicht, worin der Fehler liegt, und bald auch gar nicht mehr weiter, und der großteil des weiteren Seitenaufbaus hängt davon ab...:/

    Weiß da noch jemand weiter?
  • Du mischst hier ein bisschen Begriffe. Du willst nicht mehrere Sessions haben/löschen, du willst stattdessen einen Teil der Session Variablen löschen.
    Auch ich habe mir den Code nicht angeschaut - wollen wir dein Problem nicht lieber auf ein Beispiel abstrahieren?

    Erzeuge dir mal 3 Dateien und spiele ein wenig damit rum, damit solltest du eigentlich alles nachvollziehen können.
    "anmelden.php" erzeugt dir immer einen neuen Login.
    demo.php
    -> zeigt dir ein leeres array wenn du vorher nicht angemeldet warst
    -> zeigt dir die letzte userid, falls du mal angemeldet warst
    -> zeigt dir userid + angemeldet status falls du noch angemeldet bist
    abmelden.php
    -> löscht den status "angemeldet"

    Quellcode

    1. <?php
    2. // anmelden.php
    3. error_reporting(E_ALL);
    4. session_start();
    5. $_SESSION['id'] = uniqid();
    6. $_SESSION['eingeloggt'] = true;
    7. print_r($_SESSION);


    Quellcode

    1. <?php
    2. // demo.php
    3. error_reporting(E_ALL);
    4. session_start();
    5. print_r($_SESSION);


    Quellcode

    1. <?php
    2. // abmelden.php
    3. error_reporting(E_ALL);
    4. session_start();
    5. unset($_SESSION['eingeloggt']);
    6. print_r($_SESSION);
  • Problem behoben.

    $_SESSION wurde als Argument an eine Funktion übergeben, und war daraufhin von außen nicht mehr beschreibbar (Schätze mal die Scopes haben sich überschnitten) worauf die Session ansich verloren ging.

    E: Aah, zu spät:D
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jan Thurau ()