繁体   English   中英

如何在PHP中重定向回上一页?

[英]How to redirect back to the previous page in PHP?

我有一个PHP站点,它有一个登录页面。 我还有一个order.php页面。 当用户未登录时,订单页面首先将用户重定向到登录页面。 我想当用户从订单页面重定向到登录页面然后成功登录时,用户应该重定向回订单页面。 当用户从其他页面进入登录页面然后成功登录时,用户应该重定向到index.php页面。 我该怎么做? 任何的想法?

order.php

<?php 
if (!logged_in()){
   header("Location: login.php?referrer=order");
}
?>

的login.php

<?php 
if (login_successful()){
   switch($_GET['referrer'])){
      case 'order':
          header("Location: order.php");
      break;
      case 'other':
          header("Location: other.php");
      break;
      default:
          header("Location: index.php");
   }
}
?>

形成

<form method="post" action="login.php">
    //
    // Form content
    // 
</form>

---替换为---

形成自己

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    //
    // Form content
    // 
</form>

只需在链接中使用网址即可。 order.php的网址是:
http://somesite.com/login.php?url=order.php
在您的登录页面中,您可以阅读$_GET["url"]并决定是将用户重定向还是将其重定向到index.php。

当用户未登录时,订单页面首先将用户重定向到登录页面。

为什么要额外重定向?
为什么不立即显示登录表单,成功登录后只需重定向到同一页面?

这是auth.php页面的简短示例

<?
if (isset($_POST['auth_name'])) {
  $name  = mysql_real_escape_string($_POST['auth_name']);
  $pass  = MD5($_POST['auth_name'].$_POST['auth_pass']);
  $query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'";
  $res   = mysql_query($query) or trigger_error(mysql_error().$query);
  if ($row = mysql_fetch_assoc($res)) {
    session_start();
    $_SESSION['user_id'] = $row['id'];
  }
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  exit;
}
if (isset($_GET['action']) AND $_GET['action']=="logout") {
  session_start();
  session_destroy();
  header("Location: http://".$_SERVER['HTTP_HOST']."/");
  exit;
}
if (isset($_REQUEST[session_name()])) session_start();
if (empty($_SESSION['user_id'])) {
  return;
} else {
  include 'top.php';
?>
<form method="POST">
<input type="text" name="auth_name"><br>
<input type="password" name="auth_pass"><br>
<input type="submit"><br>
</form>
<? 
  include 'bottom.php';
}
exit;
?>

现在您可以使用以下一行来保护任何页面

require "auth.php";

您可以设置跟踪返回页面的cookie或会话值。 成功登录后,检查是否有返回页面。 如果是,请转到该页面。 如果没有,请转到默认的欢迎页面。

在重定向到登录页面之前,将登录目标存储到会话中。

例:

  1. order.php页面检查用户是否已登录并在必要时调用login.php 在重定向到login.php页面之前,它将登录目标存储为$_SESSION['loginTarget'] = 'order.php' ;
  2. 登录页面成功完成后,将调用登录目标。 header('Location: '.$_SESSION['loginTarget'], true, 303); exit;

由于登录目标存储在会话中,您可以轻松地在登录页面上进行错误处理,甚至可以创建新的用户帐户而不是登录(无需将URL中的目标传递给每个页面)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM