登录后重定向到上一页?的PHP

我一直在寻找解决方案,但无论尝试如何,似乎都无法正确解决。

成功登录后,应该将用户重定向到他来自的页面,假设他一直在浏览帖子,并且想要登录以便可以发表评论,因此应该将他重定向到他正在浏览的帖子。所以这是我所拥有的:

显示登录表单:

<form method="post" action="login-check.php">

... //input for username and password

</form>

在 检查用户名和传球被输入,的确用户存在,或者如果他已经登录,并且p参数发送给login.php中:

<?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发送回 并显示相应的消息:

<?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");

}

?>

但是,成功登录后,它应该转到用户先前访问的页面,而不是转到index.php。我已经尝试了不同的方法,但是以太它根本不起作用,或者返回到login.php。它不必是超级安全的,因为我正在为学校项目这样做。

另外,我认为自己是新手,所以请耐心等候:D

回答:

一种常见的方法是通过$_GET变量将用户的当前页面传递到“登录”表单。

例如:如果您正在阅读文章,并且想要发表评论。评论的网址为comment.php?articleid=17。虽然comment.php是装载,它注意到您还没有登录,它要送你去login.php,像你刚才表现。但是,我们将更改您的脚本,这样也可以告诉登录页面记住您的位置:

header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));

// Note: $_SERVER['REQUEST_URI'] is your current page

这会将用户发送至:login.php?location=comment.php%3Farticleid%3D17login.php现在应该检查是否$_GET['location']已填充。如果已填充,则将用户发送到该位置(在这种情况下为comment.php?articleid=17)。例如:

//  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();

}

$_GET['location']在将用户发送到那里之前,应该对它进行一些验证。例如,如果我告诉使用您网站的人单击此链接:login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php…,那么他们将被发送到一个外部URL,该URL会尝试执行不良操作。

始终urlencode在将URL作为$_GET参数传递时使用。这种编码特殊网址字符(例如?&%),以便它们不会打破你的URL(如:login.php?location=comment.php?id=17<

-这样做有两个?的,将无法正常工作)

以上是 登录后重定向到上一页?的PHP 的全部内容, 来源链接: utcz.com/qa/408921.html

回到顶部