如何在登录后将用户重定向回所需的URL(php)

时间:2014-08-12 14:01:06

标签: php redirect

用户点击了链接

HTTP :: //www.myapp.com/anypage.php 他没有登录,那么他应该重定向到

http://www.myapp.com/login.php

成功登录后如何将他重定向回http://www.myapp.com/anypage.php

我这样做

if (strpos($_SERVER["HTTP_REFERER"],'myapp.com') !== false && strpos($_SERVER["HTTP_REFERER"],'login')  !== false) {
                            //echo found

                                //$this->redirect($_SERVER["HTTP_REFERER"]);
                            }

我知道这个错误,但我找不到其他解决方案,因为我会将HTTP_REFERER读到登录页面

1 个答案:

答案 0 :(得分:1)

登录后,您可以将http标头更改为其他位置以创建重定向。

if(Successful Login) {
    header("location: success.php");
    exit(); //to stop script 
}
else { //unsuccessful
    header("location: login.php");
    exit(); 
}

只需确保此代码在任何html标记之前,或在使用php回显/打印任何内容之前。

要让脚本重定向到用户在会话到期之前所在的页面,请将上述内容与以下内容结合起来:

下一行代码必须在你检查脚本超时的时候。

获取当前页面并将其存储在会话中:

$_SESSION['page'] = __FILE__;

在我们检查登录是否已过期的脚本部分中,该部分必须在上面的代码行之前,我们可以从“'页面”中删除最后一页的内容。会话中的字段,并将其在查询字符串中传递回登录页面。这意味着如果用户再次成功登录,您可以从查询字符串中提取他们所在的页面并从中重定向。

检查超时

if(user login is timed out) {

    $header = "login.php?redirect=".$_SESSION['page']; //won't have been changed to the current page yet.
    header("location: ".$header);

}

在login.php或您的登录页面上,检查查询字符串中是否设置了重定向字段。如果是,您可以将其添加为表单中的隐藏字段

if(isset($_GET['redirect'])) {

    echo "<input name='redirect' type='hidden' value='".$_GET['redirect']."' />";

}

最后,在验证登录信息的脚本上,您可以查看重定向字段是否存在或设置。

如果你发布了表格,你可以这样做:

//Validate login

if(valid login) {

   //check if redirect was set
   if(isset($_POST['redirect'])) {

       header("location: ".$_POST['redirect']);
       exit();

   }
   else
     //go to normal landing page

}