Session-Variable üblebt Redirect nicht

  • Indem man einfach session_start();schreibt. Wenn du eine Session mit session_start(); anfängst, dann wird am ende der Datei das $_SESSION Array gespeichert und wieder gefüllt, wenn du in einem Anderen script wieder session_start() machst, da geht auch nix verloren.
    Das einige was sein kann, ist dass dein Browser den Session-Keks (meist PHPSESSID) nicht mag und wieder ausspukt xD

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Kommt drauf an was du willst, die spezielle Session['test'] mit unset löschen

    Oder gleich mit session_destroy() die gesammte Session

    Edit: huch verlesen :D
    Tobse, warum sollte ein Browser die PHPSESSID ausspucken? :D

    2 Mal editiert, zuletzt von Pion (6. September 2010 um 17:19)

  • Glasguckel auspacken , die Gugel meint das du $_SESSION['test'] = '12345'; nach dem Redict im Code hast

  • Öhm dazu brauchst du aber keinen Redict, kannst auch nach unten springen ohne einen Redict...

    Abgesehen davon könnte du hier einfach GET Parameter an die Rediction hängen..

    Aber was soll ich sagen, ich kann nicht Hellsehen von dem Herr keine Ahnung was du falsch machst nach deiner Fehlerbeschreibung(da ja Meta geht) füllst du die Session erst nach dem Redict


    mfg

  • Ich schau mir das nochmal an - is recht komplex aufgebaut das Ding.
    Der Redirect is auch an eine Bedingung geknüpft. Vielleicht hab ich da ja was verbockt :mrgreen:

    Danke jedenfalls ;)


    EDIT:
    Danke für den Tipp mit dem "ohne Redirect springen".
    Auf die Idee bin nicht gekommen und wusste auch nicht dass das geht wenn man im action-Attribut einfach das Sprungziel angibt...

    <form action="index.html#foot" method="post">

    Jetzt funzt alles :mrgreen:

  • Zu dem Problem:
    Das hatte ich auch schon mal und da musste ich über nochmal eine Datei springen.
    Dann hats bei mir gefunzt, aber innerhalb der gleichen Datei redirecten geht nicht.

    Zumindest habe ich da auch keine Lösung gefunden.
    Hab das sogar hier gepostet, mom ich suchs mal raus. :P

  • Naja, wenn du dem browser sagst, deine beue adresse soll jetzt #form sein, kann der ja da reininterpretoeren was er will. Du könntest auchnoch versuchen, ihn nach datei.php#foo zu leiten, das kann det FF nicht falsch verstehen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ja klar geht das, aber ich hatte dasselbe Problem, als ich auch in der gleichen Datei redirecten wollte.
    Als ich über eine andere Datei redirecte und dann wieder zurück, dann gings.

  • Das einzige was ich mir vorstellen kann ist das du zb in der index.php auf dieselbe index.php redictest aber es dem script nicht sagst, so entsteht eine Endlosredictschleife die zum Abbruch führt


    mfg

  • Nä, das hätt ich bestimmt bemerkt.
    Es ging einfach nur die Session Variable nicht, wie hier schon Donkey beschrieb.

    So wies aussieht, weiss also keiner eine Lösung dazu.
    Ich sag jetzt halt nur, falls du - Donkey - das wieder brauchen solltest, dann merk dir, geh einfach über eine redirect-PHP-Seite und dann wieder zurück ins index Script, natürlich aufpassen wegen Endlosschleifen.

  • Nä, das hätt ich bestimmt bemerkt.
    Es ging einfach nur die Session Variable nicht, wie hier schon Donkey beschrieb.

    So wies aussieht, weiss also keiner eine Lösung dazu.
    Ich sag jetzt halt nur, falls du - Donkey - das wieder brauchen solltest, dann merk dir, geh einfach über eine redirect-PHP-Seite und dann wieder zurück ins index Script, natürlich aufpassen wegen Endlosschleifen.



    Ohne Code weiß natürlich keiner wo der Fehler liegt und kann eine Lösung bieten. Aber einen Fehler habt ihr beide definitiv gemacht. PHP ist bei euch sicherlich nicht "kaputt", auch wenn viele Leute das gerne so haben wollen wenn etwas nicht klappt, da es ja keinesfalls an ihrem Code liegen kann, der selbstverständlich richtig ist...

    Wenn man es richtig macht funktioniert sowas völlig problemlos.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Ich habe nicht gesagt, PHP sei kaputt, das stimmt nicht.
    Ausser in meinem Falle von den Segmentation Faults.

    Den Script habe ich leider nicht mehr, aber ich weiss, wie er aufgebaut wurde:

    • Aufruf: Session Start
    • Wenn Session Variable x nicht gesetzt ist, wird sie mit einer ID gefüllt
    • Überprüfung auf GET Var redir

      • Wenn redir nicht no ist

        • Weiterleitung auf den gleichen Script aber mit GET Var redir=no mit header()
      • Sonst Ausgabe von SESSION Variable x


    Das geht aber nicht, es wird nichts angezeigt.

    So hat er das wahrscheinlich auch gemacht.
    Und ich habe wirklich NUR das reingeschrieben, mehr nicht.



  • Natürlich geht das, habe grad mal eben exakt deine Beschreibung nachgebaut:

    PHP
    <?php
    session_start();
    $_SESSION['var'] = !isset($_SESSION['var']) ? uniqid() : $_SESSION['var'];
    if(!isset($_GET['redir']) || $_GET['redir']!="no") {
    	header("Location: mytest.php?redir=no");
    }
    echo $_SESSION['var'];
    ?>

    Was soll da jetzt nicht funktionieren? Läuft einwandfrei.


    Allerdings habe ich mir grad nochmal das Eröffnungspost angeschaut. Der TE hat uns da offensichtlich eine wichtige Fehlermeldung verheimlicht. Diese ist so einleuchtend und selbsterklärend, dass er sich den Thread hier auch hätte sparen können, bzw. zumindest den Hinweis darauf hätte bringen müssen:

    PHP
    header("HTTP/1.1 301 Moved Permanently");
    header("Location:#foot");


    Damit begibst du dich in einen Endlos-Loop, die Seite ruft sich immer wieder selbst auf. Und der Browser gibt auch eine entsprechende Meldung aus.
    Du kannst mit PHP nicht innerhalb einer HTML-Datei springen, weil PHP serverseitig läuft. header("Location: xxx") führt immer zu einem neuen Seitenaufruf. Und wenn das selbe Script immer wieder aufgerufen wird und der header()-Befehl nicht in einem einschränkenden if-Befehl liegt, der dafür sorgt, dass er nur beim ersten Aufruf der Seite ausgeführt wird, hat man einen klassischen Endlos-Loop.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook