Php 将用户发送回引用页面
在用户成功登录后,我正在努力设置重定向 登录页面应将用户重定向到成功登录后被拒绝访问的页面 例如,如果用户在登录(无会话)之前单击“我的帐户”,那么他们将成功重定向到登录页面,但一旦登录,我如何将他们发送回“我的帐户”页面 我尝试的方法包括Php 将用户发送回引用页面,php,redirect,Php,Redirect,在用户成功登录后,我正在努力设置重定向 登录页面应将用户重定向到成功登录后被拒绝访问的页面 例如,如果用户在登录(无会话)之前单击“我的帐户”,那么他们将成功重定向到登录页面,但一旦登录,我如何将他们发送回“我的帐户”页面 我尝试的方法包括$\u会话['HTTP\u REFERER] 任何帮助都将不胜感激。使用是危险的,因为如果用户在尝试登录时收到错误(例如错误的密码),则推荐人将处于同一登录页面。在将用户重定向到登录页面之前,您应该将返回URL存储在会话变量中,然后在用户成功登录后,将其重定向
$\u会话['HTTP\u REFERER]
任何帮助都将不胜感激。使用是危险的,因为如果用户在尝试登录时收到错误(例如错误的密码),则推荐人将处于同一登录页面。在将用户重定向到登录页面之前,您应该将返回URL存储在会话变量中,然后在用户成功登录后,将其重定向到存储的返回URL
例如,假设您需要保护page.php
,您可以在文件的开头有如下内容:
if (empty($_SESSION['user'])) {
$_SESSION['backURL'] = $_SERVER['REQUEST_URI'];
header('Location: login.php');
exit;
}
然后,在用户成功登录后,您可以填充$\u SESSION['user']
变量,然后重定向到您存储的URL,然后再将其发送到登录页面(或者如果由于任何原因您没有存储任何返回URL,则重定向到站点的根):
试试这个:
<?php
header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
可以,但请注意:
在发送自定义标题之前,您不能输出(
echo
,print\r
,etc)任何内容。让执行重定向的页面设置一个会话变量,该变量是该页面的URL:
session_start();
if (!$logged_id)
{
$_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;
您应该记住变量中上次访问的页面,如
$\u SESSION[“last\u page”]
(不包括登录页面)。用户成功登录后,获取变量的值并将用户重定向到其以前的位置
你不能使用推荐人。例如,若用户第一次尝试登录失败,在第二次尝试中,他的推荐人将进入登录页面
另一种方法是使用ajax对用户进行身份验证,而无需单独的登录页面。若登录成功,您只需使用javascript刷新页面即可 在上面尝试过,但不起作用。登录后让我保持在同一页面。会话成功创建,这意味着用户名和密码正确。此方法有效,感谢所有给出答案的人的帮助。再次感谢您,如果您测试$_会话['backURL',RaduIt会更好;因为如果有人给登录页面添加书签并直接打开它,就会出现错误。找不到页面之类的内容…我知道。OP特别询问了“将用户发送回引用页面”的问题,而代码片段就是这样做的,这并不意味着OP想要这样做。
session_start();
if (!$logged_id)
{
$_SESSION['redirect_url'] = $_SERVER['PHP_SELF'];
header('Location: login.php');
exit;
}
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;