Ich habe nach einer Lösung gesucht, aber es scheint, dass ich es nicht richtig machen kann, egal was ich versuche.
Nach dem erfolgreichen Login sollte der Benutzer zu der Seite weitergeleitet werden, von der er gekommen ist. Nehmen wir an, er hat einen Beitrag durchsucht und möchte sich einloggen, damit er einen Kommentar hinterlassen kann. Er sollte also zu dem Beitrag weitergeleitet werden, den er durchsucht hat. Also hier ist was ich habe:
login.php zeigt das Anmeldeformular:
<form method="post" action="login-check.php">
... //input for username and password
</form>
Die login-check.php prüft, ob Benutzername und Passwort eingegeben wurden, ob der Benutzer existiert oder ob er bereits angemeldet ist und ein Parameter p an login.php gesendet wird:
<?php
session_start();
if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
header("Location:login.php?p=1");
exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
header("Location:login.php?p=2");
exit();
}
elseif(isset($_SESSION['id_login'])) {
header("Location:login.php?p=3");
exit();
}
?>
p wird an login.php zurückgesendet und zeigt die entsprechende Nachricht an:
<?php
if(isset($_GET['p'])) {
$p = $_GET["p"];
if($p=="1")
echo "<p class=\"red\">You didn't fill the form.</p><br></br>";
if($p=="2")
echo "<p class=\"red\">User exists.</p><br></br>";
if($p=="3")
header("Location: index.php");
}
?>
ABER, anstatt nach der erfolgreichen Anmeldung zur index.php zu gehen, sollte die Seite aufgerufen werden, die der Benutzer zuvor war. Ich habe es auf verschiedene Weise versucht, aber es funktioniert überhaupt nicht oder es kehrt zu login.php zurück. Es muss nicht unbedingt sicher sein, weil ich dies für ein Schulprojekt mache.
AUCH, ich halte mich für ziemlich Anfänger, also bitte Geduld haben: D
Ein üblicher Weg ist, die aktuelle Seite des Benutzers über eine $_GET
-Variable an das Anmeldeformular zu übergeben.
Zum Beispiel: wenn Sie einen Artikel lesen und einen Kommentar hinterlassen möchten. Die URL für Kommentare lautet comment.php?articleid=17
. Während comment.php
geladen wird, stellt es fest, dass Sie nicht angemeldet sind. Es möchte Sie an login.php
senden, wie Sie es bereits gezeigt haben. Wir werden jedoch Ihr Skript so ändern, dass auch die Anmeldeseite aufgefordert wird, sich zu merken, wo Sie sich befinden:
header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));
// Note: $_SERVER['REQUEST_URI'] is your current page
Dies sollte den Benutzer an folgende Adresse senden: login.php?location=comment.php%3Farticleid%3D17
. login.php
sollte nun prüfen, ob $_GET['location']
eingetragen ist. Wenn es ausgefüllt ist, senden Sie den Benutzer an diesen Ort (in diesem Fall comment.php?articleid=17
). Zum Beispiel:
// login.php
echo '<input type="hidden" name="location" value="';
if(isset($_GET['location'])) {
echo htmlspecialchars($_GET['location']);
}
echo '" />';
// Will show something like this:
// <input type="hidden" name="location" value="comment.php?articleid=17" />
// login-check.php
session_start();
// our url is now stored as $_POST['location'] (posted from login.php). If it's blank, let's ignore it. Otherwise, let's do something with it.
$redirect = NULL;
if($_POST['location'] != '') {
$redirect = $_POST['location'];
}
if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
$url = 'login.php?p=1';
// if we have a redirect URL, pass it back to login.php so we don't forget it
if(isset($redirect)) {
$url .= '&location=' . urlencode($redirect);
}
header("Location: " . $url);
exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
$url = 'login.php?p=2';
if(isset($redirect)) {
$url .= '&location=' . urlencode($redirect);
}
header("Location:" . $url);
exit();
}
elseif(isset($_SESSION['id_login'])) {
// if login is successful and there is a redirect address, send the user directly there
if($redirect)) {
header("Location:". $redirect);
} else {
header("Location:login.php?p=3");
}
exit();
}
Gotchas
Sie sollten eine Überprüfung gegen $_GET['location']
ausführen, bevor Sie den Benutzer dorthin schicken. Wenn ich beispielsweise Personen, die Ihre Website verwenden, mit einem Klick auf diesen Link sagen: login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php
..., werden sie an eine fremde URL gesendet, die versucht, etwas Schlechtes zu tun.
Stellen Sie immer sicher, dass Sie urlencode
verwenden, wenn Sie URLs als $_GET
-Parameter übergeben. Dies verschlüsselt spezielle URL-Zeichen (wie ?
, &
und %
), damit diese Ihre URL nicht beschädigen (z. B. login.php?location=comment.php?id=17
<- dies hat zwei ?
s und funktioniert nicht richtig).
Wenn der Benutzer zur Anmeldeseite kommt, verwenden Sie diese, um zu sehen, woher er kommt
$_SERVER['HTTP_REFERER']
Setzen Sie dann diesen Wert in die Sitzung und verwenden Sie bei der Authentifizierung die URL der Sitzung, um ihn zurückzuleiten. Sie sollten jedoch vorher überprüfen, ob die URL Ihre Site ist. Vielleicht kommt er direkt von einer anderen Seite zum einloggen :)
Sie können eine Seite mit PHP wie folgt speichern:
$_SESSION['current_page'] = $_SERVER['REQUEST_URI']
Und zurück zur Seite mit:
header("Location: ". $_SESSION['current_page'])
Da es sich bei der Anmeldeseite um eine separate Seite handelt, gehe ich davon aus, dass Sie auf die Seite umleiten möchten, von der aus der Benutzer die Anmeldeseite erreicht hat.
$_SERVER['REQUEST_URI']
hält einfach die aktuelle Seite. Sie möchten $_SERVER['HTTP_REFERER']
verwenden
Speichern Sie also den HTTP_REFERER in einem versteckten Element in Ihrem Formular <input type="hidden" name="referer" value="<?= $_SERVER['HTTP_REFERER'] ?>" />
. Denken Sie jedoch daran, dass Sie in PHP, das das Formular verarbeitet, eine Logik benötigen, die zurück zur Anmeldeseite führt, wenn die Anmeldung fehlschlägt Ist Ihre Website, falls nicht, dann zurück zur Startseite.
Sie sollten die URL, auf die umgeleitet werden soll, wahrscheinlich in eine POST - Variable einfügen.
Ein anderer Weg, mit SESSION
Aktuelle URL der Session zuweisen (auf jeder Seite verwenden)
$_SESSION['rdrurl'] = $_SERVER['REQUEST_URI'];
und auf Ihrer Anmeldeseite verwenden
if(isset($_SESSION['rdrurl']))
header('location: '.$_SESSION['rdrurl']);
else
header('location: http://example.com');
verwenden Sie so etwas wie
$_SERVER['HTTP_REFERER'];
Wenn es sich um ein erfolgreiches Login handelt, zeigen Sie einen Link mit der Aufschrift "Hier klicken, um zurück zu gehen" und einen Link zum Referrer an. Wenn die Seite geladen wird, verwenden Sie ein Javascript, um diese Seite automatisch zu laden (verwenden Sie nicht back () oder was auch immer) Funktion ist, da die Seite nicht erneut geladen wird und es so aussieht, als wäre der Benutzer nie angemeldet.
Sie können session verwenden, um die aktuelle Seite zu speichern, auf der Sie nach der Anmeldung zurückkehren möchten. Dies funktioniert auch für andere Seiten, wenn Sie die Sitzung ordnungsgemäß verwalten. Es ist eine sehr nützliche Technik, da Sie Ihren Breadcrumb damit entwickeln können.
Sie sollten etwas wie $_SERVER['HTTP_REFERER']
versuchen.
Sie sollten zuerst eine Benutzerreferenzseite in einer Variablen erhalten, indem Sie $ _SERVER ['HTTP_REFERER'] verwenden. in Ihrer Login-Seite.
MÖGEN:
<?php
session_start();
$refPage = $_SERVER['HTTP_REFERER'];
?>
Wenn der Benutzer nun zum Anmelden klickt, dann ändern Sie den Kopfzeilenspeicherort in Benutzer, siehe Seite
MÖGEN:
<?php
if(isset($_POST[login])){
session_start();
header('location:' . $refPage);
}
?>
In dieser Zeit sollten Sie zunächst prüfen, ob der Benutzer die Seite als leer bezeichnet oder nicht, da Ihr Benutzer Ihre Anmeldeseite direkt besuchen kann. Dann wird Ihre $ refPage-Variable leer sein, nachdem die Click to Login-Seite hier angezeigt wird
MÖGEN:
<?php
if(isset($_POST[login])){
session_start();
$refPage = $_SERVER['HTTP_REFERER']; // get reffer page url
if(empty($refPage)){
header('location: yourredirectpage'); // if ref page is empty then set default redirect page.
}else{
header('location:' . $refPage); // or if ref page in not empty then redirect page to reffer page
}
}
?>
Sie können auch den versteckten Eingabetyp verwenden, in dem Sie den Wert $ _SERVER ['HTTP_REFERER'] setzen können.
MÖGEN:
<input type="hidden" name="refPage" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">
Und wenn ein Benutzer zum Anmelden klickt, können Sie die refPage Wert und leiten Sie die vorherige Seite um. Und Sie sollten auch die leere Referenzseite überprüfen. Weil Ihr Benutzer Ihre Anmeldeseite direkt aufrufen kann.
Vielen Dank.
Ich habe eine Funktion zum Speichern der URL der vorherigen Seite erstellt
//functions.php
function set_previous_page_url(){
$current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_Host']}{$_SERVER['REQUEST_URI']}";
$previous_url = $_SERVER['HTTP_REFERER'];
if (!($current_url === $previous_url)){
$_SESSION['redirect_url'] = $previous_url;
}
if(isset($_SESSION['redirect_url'])){
$url = $_SESSION['redirect_url'];
return $url;
} else {
$url = "index.php";
return $url;
}
}
Und rufe diese Funktion in login.php auf
// login.php
<?php
// set previous page url to redirect after login
$url = set_previous_page_url();
if(ifItIsMethod('post')){
if(isset($_POST['username']) && isset($_POST['password'])){
if (login_user($_POST['username'], $_POST['password'])) {
redirect($url);
//unset session defined in set_previous_page_url() function
if(isset($_SESSION['redirect_url'])){
unset($_SESSION['redirect_url']);
}
}
}
}
?>
Verwenden Sie versteckte Eingaben auf Ihrer Anmeldeseite .
<input name="location" value="<?php if(!empty($_SERVER['HTTP_REFERER'])) echo $_SERVER['HTTP_REFERER']; else echo 'products.php'; ?>" type="text" style="display: none;" />
wie wäre es mit diesem :: javascript + php
echo "<script language=javascript> javascript:history.back();</script>";
es funktioniert genauso wie die vorherige Schaltfläche in Ihrem Browser
Konstruieren Sie die Formularaktion so, dass sie sich an die vorherige Seite "erinnert", indem sie ein returnurl=value
-Abfragezeichenfolge/-wert-Paar an die URL ausschreibt. Dies kann von jeder Seite übergeben werden, die zur Anmeldung umleitet.
Ich denke, Sie benötigen vielleicht den $ _SERVER ['REQUEST_URI'];
if(isset($_SESSION['id_login'])) {
header("Location:" . $_SERVER['REQUEST_URI']);
}
Das sollte die URL sein, unter der sie sich befinden, und sie nach einem erfolgreichen Login umleiten.