0

因此,出于某种原因,我尝试了 http_referer,但它对我不起作用……或者也许是,但这就是我尝试解决方法的原因。我正在浏览器中测试登录脚本,我希望用户返回他们访问的上一个页面。

我遇到的问题是当我输入登录凭据时,Firefox 和 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>';
    }
}

我也读过使用会话,但我的会话数组保存了购物车的数据,所以我不确定如何使用会话进行导航。

4

1 回答 1

3

为什么不在会话中存储重定向到登录页面的页面的 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;
于 2013-05-06T21:46:55.887 回答