Dynamische Weiterleitung nach erfolgtem Login mittels Variablen

godfather_al

Mitglied
Hallo zusammen,

habe ein Login welches derzeit so aussieht und als login.inc.php eingebunden ist:

PHP:
<?php
session_start();

$verbindung = mysql_connect("localhost", "xxxx3" , "xxxx3")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("xxxx3") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$passwort = md5($_POST["password"]);

$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

if($row->passwort == $passwort)
    {
    $_SESSION["username"] = $username;
    Header ("Location: index3.php?id=home&n0=home");
    }
else
    {
    Header ("Location: index3.php?id=home&n0=home");
    }
?>

Nun würde ich das gerne so ändern, dass der User nach erfolgtem Login nicht auf die Startseite ( index3.php?id=home&n0=home ) weitergeleitet wird, sondern genau auf die Seite, auf der er sich vor dem Login Vorgang auch befand. Habe es so versucht, geht aber nicht:

PHP:
Header ("Location: index3.php?id=\"{$_GET["id"]}\");

und auch versucht, die id vor dem Start des Login Skripts über Get zu holen, zu speichern und dann an die login.inc.php zu übergeben, um sie dann innerhalb der Header Anweisung zu verwenden, aber auch das klappt leider nicht. Bitte gebt mir einen Tip wie ich das realisieren kann, dass der User nach dem Login entsprechend eingeloggt auf der Seite landet, auf der er vorher auch war.

Danke im Voraus.

Alex
 
Du musst auf jeder Seite, auf der sich der User befindet, ganz am Ende des Scripts die Id der Seite in die Session oder in ein Cookie speichern. Diesen Wert kannst du dann immer auf der Seite abrufen und so herrausfinden, auf welcher Seite der User zuletzt war.

Du kannst so natürlich auch alle Seiten speichern, auf denen sich der User befindet, indem du ein Array erzeugst und nicht überspeicherst.

PHP:
// beliebige_seite.php
/*
* Script ausführen
* 
*/
// Id speichern
$_SESSION['LastPage'] = $_GET['id'];

PHP:
// login.php
$LastPage = $_SESSION['LastPage'];
/*
* Einloggen
*/
header('location: index.php?id='.$LastPage.')';

e:/ Du musst in diesem Fall natürlich immer das gespeicherte Überprüfen ob existent, da man hier sonst sehr leicht Schadcode einbringen könnte!
 
Wenn du login.inc.php includierst und nicht direkt aufrust, wofür brauchst du dann eine Weiterleitung?

Wenn du ein Formular auf jeder Seite hast, dann musst die action des Formulars ändern, und zwar auf die aktuelle Seite
PHP:
<form method="post" action="<?php echo htmlentities($_SERVER['REQUEST_URI'];?>">
...
...


Außerdem solltest du die Abfrage in die Datenbank ändern, wegen Injection:
PHP:
$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '".mysql_real_escape_string($username)."' LIMIT 1";
 
Erstmal danke für die vielen Tips, das habe ich gerade versucht:

PHP:
header('Location: index3.php?id='.rawurlencode($_GET['id']).'&'.SID);

wobei diese Fehlermeldung kommt: syntax error, unexpected '"' expecting T_String or T_Variable...

auf jeder Seite habe ich eine marginloginbox.inc.php inkludiert, in dieser ist dann die login.inc.php inkludiert, die Loginbox mit Formular sieht so aus:

PHP:
<?php
    session_start();

    echo"<div id=\"marginloginbox\">";
    
    if(!isset($_SESSION["username"]))
    {
    echo"
    <p>
    <form action=\"login.inc.php\" method=\"post\">
    Email:<br>
    <input type=\"text\" size=\"24\" maxlength=\"50\"
    name=\"username\"><br><br>
    Passwort:<br>
    <input type=\"password\" size=\"24\" maxlength=\"50\"
    name=\"password\"><br><br>
    <input type=\"submit\" value=\"Einloggen\"><br>oder:<br>
    </form><form action=\"register.php\" method=\"post\"><input type=\"submit\" value=\"Registrieren\"></p>";
    }
    else
    {
    $username = $_SESSION["username"];
    echo "
    <p>Sie sind eingeloggt als:<br><br> $username<br><br>
    <form action=\"logoff.inc.php\" method=\"post\">
    <input type=\"submit\" value=\"Ausloggen\"></p>";
    }
    echo"</div>";
?>


Werde jetzt gerad die anderen Vorschläge ausprobieren....
 
Zuletzt bearbeitet:
Also das mit dem Speichern der letzten Seite auf der der User war in der Session hat jetzt funktioniert :-)

@CookieBuster: Wie könnte denn so eine Sicherheitsabfrage aussehen, und zweite Frage kann ich auch die Seite selbst auslesen und als Var speichern, es gibt nämlich verschiedene Bereiche wie index3.php?id=, xyliste.php?id= etc....

@ComFreek: Bei der rawurlencode habe ich mit gettypeof() leider auch kein Ergebnis angezeigt bekommen, vlt. wars auch ein Syntaxfehler bei mir oder so :-(
 
Du kannst jede beliebe Variable in deiner Session speichern, du musst nur wissen, was es alles gibt und das dann auf der Weiterleitungsseite auswerten.

erstell dir eine Whitelist, was alles für Inhalte erlaubt sind. D.h. ein Array in dem alle gültigen Werte aufgelistet sind. Dann überprüfst du, bevor du weiterleitest, ob der Inhalt in deiner Session auch in deiner Whitelist vorkommt. Damit schließt du jedwedige Manipulation von Seiten des Users aus.


e:/ Wenn dir ein Beitrag geholfen hat, egal von wem, dann ist es immer Nett den "Danke"-Knopf zu benützen oder den Beitrag zu bewerten :)
 
@CookieBuster: Perfekt danke, eine letzte Frage, sind das die Befehle um die URL, also das was vor dem Fragezeichen steht, auszulesen:


$url = $_SERVER['REQUEST_URI'];

$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
 

Neue Beiträge

Zurück