PHP 重定向回上一页

标签 php session redirect http-referer

我对 login.php 页面所做的是,如果用户已登录,他将被重定向到 first.php 页面。

session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
    header("Location: first.php");
} 

在所有其他页面中,如果用户尚未登录,他将被重定向到 login.php 页面。

session_start();
if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
    header("Location: login.php");
} 

问题来了:有没有办法将用户重定向回原来的位置?假设您在未登录的情况下尝试访问 second.php,您现在将被重定向到 login.php 页面;登录后,是否可以将您重定向回 second.php 而不是 first.php?

我尝试使用 $_SERVER['HTTP_REFERER'],但是这个变量不包含任何内容;如果您因为点击了链接而来到这里,它只会包含一些内容。

最佳答案

  1. 在他们尝试登录的页面上,设置一个包含该页面 URL 的 session 变量。
  2. 然后将他们重定向到登录页面。
  3. 成功登录后,从他们的 session 中获取之前的 URL 并将他们重定向到那里。

让执行重定向的页面设置一个 session 变量,即该页面的 URL:

session_start();
if (!$logged_in)
{
    $_SESSION['redirect_url'] = $_SERVER['PHP_SELF']; 
    header('Location: login.php');
    exit;
}

然后在成功登录后将他们重定向到该 URL:

session_start();

/* Login code goes here */

$redirect_url = (isset($_SESSION['redirect_url'])) ? $_SESSION['redirect_url'] : '/';
unset($_SESSION['redirect_url']);
header("Location: $redirect_url", true, 303);
exit;

上面的内容可以改进,但这应该给你想法。

关于PHP 重定向回上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847316/

相关文章:

php - 扩展 Laravel 的抽象 TestCase 类时出错(错误是说我的扩展类必须是抽象的)

php - 使用 nodeValue 从 domelement 打印出 html 内容

java - Cassandra:在 super 列上设置 TTL

javascript - JQuery比较输入值?

python - 在 Flask (Python) 中重定向到包含 'variable part' 的 URL

.htaccess - 问题 301 redirect not allowing login in the backend

php - openssl_encrypt 的密码参数是什么?

javascript - jQuery 旋钮释放功能附加参数

php - 如何在领域驱动设计中处理用户 session

javascript - 如何共享登录 session ?