php登录后导航到上一页解决方法

php登录后导航到上一页解决方法,php,javascript,login,Php,Javascript,Login,所以出于某种原因,我尝试了http_referer,但它对我不起作用……或者可能是,但这就是我尝试解决方法的原因。我正在我的浏览器中测试登录脚本,我希望用户返回到他们访问的上一页 我遇到的问题是,当我输入登录凭据时,Firefox和Chrome会弹出一个“保存密码”选项,我认为它就像一个页面。因此,当调用http_referer或 echo '<script type="text/javascript">javascript:history.go(-1);</script>

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

我遇到的问题是,当我输入登录凭据时,Firefox和Chrome会弹出一个“保存密码”选项,我认为它就像一个页面。因此,当调用http_referer或

echo '<script type="text/javascript">javascript:history.go(-1);</script>';
echo'javascript:history.go(-1);';
该页面仍在登录页面上!如果用户单击一次“不保存”并保存该选项,那么使用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>';
    }
}
if($login\u check>0){
echo'javascript:history.go(-1);';
函数curPageName(){
返回substr($服务器[“脚本名称”]、strrpos($服务器[“脚本名称”]、“/”)+1);
}
$curpage=curPageName();
如果($curpage=“login.php”){
echo'javascript:history.go(-1);';
}
}

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

为什么不在会话中存储重定向到登录页面的页面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");
注意。上面的URL是粗略构造的,如果您使用SSL或其他端口(不是80),则需要相应地更改它

在成功登录时检索它

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

为什么不在会话中存储重定向到登录页面的页面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");
注意。上面的URL是粗略构造的,如果您使用SSL或其他端口(不是80),则需要相应地更改它

在成功登录时检索它

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

请帮帮我,因为我还在想办法。如果我在整个站点的会话中存储值,此会话是否会覆盖该会话?或者它们都是基于各自的变量而分开的?我计划做的是,如果有人在他们的购物车中添加东西,我会在会话中将其存储在一个数组中。然后,当用户登录时,我将(以某种方式)合并它们。你的方式会弄乱初始会话吗?你可以保存很多会话变量。设置$\u会话['redirect\u url']只会覆盖$\u会话['redirect\u url'],不会影响任何其他会话数据。如果您想查看存储的会话数据以及变量名,可以这样做:好的,谢谢Nick。我会调查一下,试着了解更多。感谢您的帮助。了解关联数组会很有帮助,这就是PHP会话。这里可以找到会话的一个很好的概述:这很简单,只是不包括重定向部分。因此,在每个非登录页面的页面上,将url保存到以下会话:$\u session['redirect\u url']='http://'。$\u SERVER[“SERVER\u NAME”]。$\u SERVER[“REQUEST\u URI”];请帮帮我,因为我还在想办法。如果我在整个站点的会话中存储值,此会话是否会覆盖该会话?或者它们都是基于各自的变量而分开的?我计划做的是,如果有人在他们的购物车中添加东西,我会在会话中将其存储在一个数组中。然后,当用户登录时,我将(以某种方式)合并它们。你的方式会弄乱初始会话吗?你可以保存很多会话变量。设置$\u会话['redirect\u url']只会覆盖$\u会话['redirect\u url'],不会影响任何其他会话数据。如果您想查看存储的会话数据以及变量名,可以这样做:好的,谢谢Nick。我会调查一下,试着了解更多。感谢您的帮助。了解关联数组会很有帮助,这就是PHP会话。这里可以找到会话的一个很好的概述:这很简单,只是不包括重定向部分。因此,在每个非登录页面的页面上,将url保存到以下会话:$\u session['redirect\u url']='http://'。$\u SERVER[“SERVER\u NAME”]。$\u SERVER[“REQUEST\u URI”];