PHP导航到前一页后登录的解决方案


php navigate to previous page after login workaround

所以出于某种原因,我尝试了http_referer,它不适合我…或者也许是,但这就是为什么我在尝试一个变通的原因。我正在测试一个登录脚本在我的浏览器,我想让用户回到他们正在访问的前一个页面。

我遇到的问题是,当我把我的登录凭据,火狐和Chrome弹出一个"保存密码"选项,我认为它的行为就像一个页面。当调用http_referer或

echo '<script type="text/javascript">javascript:history.go(-1);</script>';

页面仍在登录页面!如果用户点击一次"不要保存",这个选项就被保存了……那么使用history。go(-2)就行不通了。这是我尝试过的解决方法,但我不能让它工作。

最初如果登录信息是正确的,我调用第一个history.go(-1)。然后我使用这个函数来获取当前页面,如果它与login.php匹配,我想再返回一个页面!但这行不通。请告诉我

if($login_check > 0){
    echo '<script type="text/javascript">javascript:history.go(-1);</script>';
    function curPageName() {
        return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
    }
    $curpage = curPageName();
    if ($curpage = "login.php"){
        echo '<script type="text/javascript">javascript:history.go(-1);</script>';
    }
}

我也读到使用会话,但我的会话数组保存购物车的数据,所以我不确定我将如何使用会话导航

为什么不在会话中存储重定向到登录页面的页面的URL,然后在成功登录时重定向到它?这样,即使用户有几次失败的登录尝试,他们仍然可以进入正确的页面。

与javascript相比,这个方法的另一个好处是,重定向是在页面请求的头部发送的,不需要发送用户js。

用户未登录时,将URL保存为会话变量

// not logged in
$_SESSION['redirect_url'] = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
//now redirect to login page, something like
header("Location: http://www.site.com/login");

Nb。上面的URL是粗略构建的,如果您使用SSL或其他端口(不是80),则需要相应地更改它。

登录成功后检索

//login successful 
header("Location: ".$_SESSION['redirect_url']);
exit;