get Variablen gehen bei weiterleitung mit header(location:) verloren

  • Hallo

    Ich bin grad an ner größeren Website dran und hab ein Problem.
    die User sollen sich auf jeder Seite und zu jeder Zeit ohne Problem ein- und wieder ausloggen können.

    Wenn nun aber jemand ein Such-Formular halb ausfüllt, sich dann einloggt, wird er ja zur login-Seite geleitet und von dort mit

    PHP
    $lastsite = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH);
    header("Location: $lastsite");

    wieder zurück zur Ursprungsseite.

    Leider gehen dabei eben die get Variablen der Suche verloren und das Formular ist wieder leer.

    Nachtrag: Noch nicht abgeschickte Variablen können von mir aus sogar verloren gehen. Aber bereits gesetzte Parameter, die auch schon in der URL mit drin stehen sollten auf jeden Fall bleiben.

    Kennt ihr eine Lösung für dieses Problem?
    Habe schon diverse Servervariablen durchgreschaut und nichts passendes gefunden.

  • Warum übergibst du nicht $_SERVER['REQUEST_URI'] an das login-Script und leitest dann dorthin zurück?

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Wir machen das wie folgt-
    Du hast bestimmt dein loginbereich links oder rechts.
    Dann setzt du das an die stelle:

    In der Login.php sollte dann

    PHP
    setcookie("loggedin", "yes", time()+60*60*60*60);

    erscheinen, damit er das auf YA setzt!
    Unsere Login.php sieht zb so aus:

    Ist nicht das sicherste aber vorerst übernehmbar.

    Die Intern.php kannst du dir selbst gestalten ;)

    Logout.php

    wir rufem unsere urls mit folgender $_GET['']; funktion ab:

    PHP
    <form action="forum_creat_thread.php?n=<?php echo $_GET['n']; ?>" method="post">

    Den link dazu verlinkst du so:

  • Nein das ist nicht nur ein bischen unsicher das ist absoluter unsicher;)

    Also mach doch das:

    header("Location: $lastsite?deine alte url dranhängern");


    Oder du erstellst $_SESSION in der du eben die Aktion vor dem Header speicherst

  • Afrael: REQUEST_URI funktioniert irgendwie gar nicht. Da leitet er mich immer zum login weiter. Ist also sozusagen dann ne Dauerschleife. Ich will ja wissen, auf welcher Seite der Benutzer war bevor er sich eingeloggt hat.

    @Ace_<3st: du hast mein Problem glaube ich nicht richtig verstanden. Das Problem liegt in der Weiterleitung nach dem Login auf die Seite, auf der der Nutzer vorher war. Bei mir kann er soch von zig Seiten aus einloggen und muss dann auch dahin zurück. In deinem Code wird ja immer zur index.php geleitet. Den Login mach ich natürlich mit sessions.

    @Pion: daran meine alte url dranzuhängen hab ich auch schon gedacht. Aber dazu müsste ich mit zig if-Schleifen alle Möglichkeiten von übergebenen Variablen druchgehen, oder nicht?
    Ne Session hab ich ja soweiso für jeden Nutzer. Kannst du mir näher erklären, wie du die get Variablen da reinspeichern willst? Gibts da ne elegante Möglichkeit zu?

  • Wie wärs mit

    Gruss

    2 Mal editiert, zuletzt von phore (26. Mai 2009 um 12:53)

  • so, ich hab die Lösung.

    Mann bin ich doof. Manchmal sieht man wohl den Wald vor lauter Bäumen nicht mehr.

    beim HTTP_REFERER kommen die Get-Variablen natürlich doch mit. Nur habe ich diese mit parse_url abgeschnitten, da ich auch noch auf die Richtigkeit des Hosts prüfe.

    Mein code sieht nun so aus:

  • Warum ist es schlecht, mit dem Referer zu arbeiten?
    http://www.php-faq.de/q-http-referer.html

    Das ist mir durchaus bewusst. Bessere Varianten?
    außerdem steht ja in deinem Link auch nur, dass man in Sicherheitskritischen Fragen davon Abstand nehmen sollte.
    Wenn der User den Referer deaktiviert hatm, wird er halt immer zur index.php weitergeleitet. Dann muss er eben damit leben.