【问题标题】:Sending user back to referring page将用户送回推荐页面
【发布时间】:2012-05-03 14:30:12
【问题描述】:

在用户成功登录后,我正在努力设置重定向。

登录页面应该将用户重定向到他们成功登录后被拒绝访问的页面。

例如,如果用户在登录(无会话)之前单击“我的帐户”,那么他们会成功重定向到登录页面,但一旦他们登录,我如何将他们发送回“我的帐户”页面?

我尝试的方法包括$_SESSION['HTTP_REFERER]

任何帮助将不胜感激。

【问题讨论】:

    标签: php redirect


    【解决方案1】:

    使用$_SERVER['HTTP_REFERER'] 是危险的,因为如果用户在尝试登录时收到错误(例如密码错误),则引用者将是同一个登录页面。在将用户重定向到登录页面之前,您应该将返回 URL 存储在会话变量中,然后在他们成功登录后将其重定向到存储的返回 URL。

    例如,假设您需要保护page.php,您可以在文件开头有这样的内容:

    if (empty($_SESSION['user'])) {
        $_SESSION['backURL'] = $_SERVER['REQUEST_URI'];
        header('Location: login.php');
        exit;
    }
    

    然后,在用户成功登录后,您可以填充 $_SESSION['user'] 变量,然后重定向到您存储的 URL,然后将他发送到登录页面(或者如果您不这样做,则转到站点的根目录)无论出于何种原因,都没有存储任何反向 URL):

    $backURL = empty($_SESSION['backURL']) ? '/' : $_SESSION['backURL'];
    unset($_SESSION['backURL']);
    header('Location: ' . $backURL);
    exit;
    

    【讨论】:

    • 此方法有效,感谢所有给出答案的人的帮助。再次感谢拉杜
    • 如果你测试一下会好很多 $_SESSION['backURL'];因为如果有人将登录页面添加为书签并直接打开它,就会出现错误。类似页面未找到...
    【解决方案2】:

    您应该记住变量中的上次访问页面,例如 $_SESSION["last_page"](不包括登录页面)。用户成功登录后,获取变量的值并将用户重定向到他之前的位置。

    您不能使用引荐来源网址。例如,如果用户第一次尝试登录失败,那么在第二次尝试中,他的referer 将是登录页面。

    另一种方法是使用 ajax 验证用户身份,无需单独的登录页面。如果登录成功,您可以简单地使用 javascript 刷新页面。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        header("Location: " . $_SERVER["HTTP_REFERER"]);
        

        会这样做,但请注意:

        在发送自定义标头之前,您不能输出(echoprint_r 等)任何内容。

        【讨论】:

        • 上面试过但不起作用。登录后让我在同一页面上。会话创建成功,这意味着用户名和密码正确。
        【解决方案5】:

        试试这个:

        <?php
          header("Location: " . $_SERVER["HTTP_REFERER"]);
        ?>
        

        【讨论】:

        • 我知道。 OP 专门询问“将用户发送回 referring 页面”,而 sn-p 就是这样做的,这并不意味着这是 OP 想要的。
        猜你喜欢
        • 2011-02-15
        • 1970-01-01
        • 2023-03-21
        • 2013-02-04
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多