在 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 中登录后重定向回来的主要内容,如果未能解决你的问题,请参考以下文章