3

我为 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'],但此变量不包含任何内容;如果您在这里,它只包含一些东西,因为您点击了一个链接。

4

2 回答 2

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

让进行重定向的页面设置一个会话变量,即该页面的 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;

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

于 2013-07-25T01:09:45.137 回答
2

$_SERVER['HTTP_REFERER'] 取决于 Web 浏览器,并非所有浏览器都会将引荐来源网址发送回服务器。许多大型网站使用的一种更好的方法是将当前页面传递给登录页面:

header("Location: first.php?".$currentPageUrl);

$currentPageUrl 可以从 $_SERVER['REQUEST_URI'] 或 $_SERVER['PHP_SELF'];

登录后,您可以再次将用户重定向到 $currentPageUrl。

除此之外,将用户名和密码存储在 $_SESSION 中听起来并不正确,但这是一个单独的问题。

于 2013-07-25T01:14:15.807 回答