在 PHP 中登录后重定向回来

Posted

技术标签:

【中文标题】在 PHP 中登录后重定向回来【英文标题】:Redirecting back after login in PHP 【发布时间】:2021-08-22 04:19:36 【问题描述】:

我有一个这样的场景。当管理员收到来自客户端的关于订单的邮件,其中包含指向 php 表单页面的 URL 链接,该链接只能通过管理员登录访问。如果管理员未登录,则 url 将被重定向到登录页面。管理员成功登录后,我需要将他重定向到他在电子邮件中收到的 URL。

谁能告诉我怎么做。我读了一些关于 HTTP_REFERER 的东西,但它不能正常工作,就像管理员没有登录一样,它直接重定向到 login.php

请帮我解决问题

谢谢

【问题讨论】:

【参考方案1】:

试着在这里举一些例子:

originating_page.php

if(!is_admin) 
    $_SESSION["originatingpage"] = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
    header('Location: http://'.$_SERVER["HTTP_HOST"].'/login.php');
  

login.php

if(is_admin_success_login) 
  if (isset($_SESSION["originatingpage"])) 
    $originatingpage = $_SESSION["originatingpage"];
    unset($_SESSION["originatingpage"]);
    header('Location: http://'.$originatingpage);
   else 
    //do another default action
   

【讨论】:

【参考方案2】:

存储该人尝试访问的页面的 URL 重定向到 login.php。您可以将其存储在会话变量或 URL 中。这样你的 login.php 页面就会知道用户登录后将其发送到哪里。

例如在需要登录的页面:

session_start();
$_SESSION['came_from'] = $_SERVER['REQUEST_URI'];
header("Location: login.php");

在 login.php 中,用户登录后:

session_start();
header("Location: http://" . $_SERVER['HTTP_HOST'] . $_SESSION['came_from']);

【讨论】:

URL 包含动态值,例如 ID。它可以随时更改,你能告诉我如何在 login.php 调用之前将 URL 存储在会话中 应该注意,而不是我在回答中做了特别出色的工作,Location 标头应该是完全合格的(这意味着 http://host.com 除了扩展/path/to/script.php?args)【参考方案3】:

您的登录页面可以有一个隐藏的输入:

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['HTTP_REFERER']; ?>" />

或者在“原始页面”中,您可以将当前 REQUEST_URI 作为 get 变量传递,该变量又会进入同一个表单元素。然后当他们提交表单时,您检查 $_REQUEST['redirect_to'] 并使用header().

...
if (logged in && redirect to is filled in)
  header('Location: '.$_REQUEST['redirect_to']);

...

上面是伪代码,顺便说一句

【讨论】:

以上是关于在 PHP 中登录后重定向回来的主要内容,如果未能解决你的问题,请参考以下文章

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

php 基于角色登录后重定向用户

php 登录后重定向

登录 WordPress 后重定向

facebook登录后重定向到一个URL

登录后重定向到请求的最后一页