因此,出于某种原因,我尝试了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>';
}
}
我也读过使用会话,但我的会话数组保存了购物车的数据,因此我不确定如何使用会话进行导航。
答案 0 :(得分: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");
铌。上面的URL是粗略构造的,如果您使用SSL或其他端口(而不是80),则需要相应地更改它。
成功登录后检索
//login successful
header("Location: ".$_SESSION['redirect_url']);
exit;