我在网站的每个页面都有一个登录表单,因此用户可以从任何地方登录。我有一个login.php文件,我从表单中引用它(使用'action')。
我使用$_SERVER['HTTP_REFERER']
将用户重定向到他成功登录或登出时登录的同一页面。
但如果登录时出现问题,如何将错误发送到他尝试登录的同一页面?我尝试使用$_GET
发送错误,如下所示:
// process the script only if the form has been submitted
if (array_key_exists('login', $_POST)) {
// Login code goes here...
// If there was a problem, destroy the session and prepare error message
else {
$_SESSION = array();
session_destroy();
header('Location: '.$_SERVER['HTTP_REFERER'].'?error');
exit;
}
但问题是网站上的很多网页都是这样的details.php?mid=0172495
。他们已经从$_GET
方法中重新获取信息,出于安全考虑,我无法使用其他$_GET
方法......
那么,我怎样才能传递错误? 感谢...
答案 0 :(得分:2)
由于您已经在使用会话,因此在销毁会话之后为什么不创建一个带有$ _SESSION ['error']或类似设置的新会话?或者只是根本不删除会话,但设置错误,你可以立即在其他页面检查?
答案 1 :(得分:0)
我不确定你究竟是什么意思“出于安全原因我不能使用另一个$_GET
方法”,但是如果查询字符串中已经存在某些内容,则只需要附加另一个变量它,而不是取代它。
也就是说,如果地址与details.php?mid=0172495
类似,则应将其发送至details.php?mid=0172495&error
,而如果仅details.php
,则将其发送至details.php?error
。
答案 2 :(得分:0)
补充Chad Birch所说的......
在您重定向的登录脚本中,检查字符“?”的HTTP_REFERER值。如果存在,请将“& error”附加到HTTP_REFERER并重定向到该地址。否则将'?error'附加到HTTP_REFERER并重定向到该。
答案 3 :(得分:0)
执行所需操作的另一种方法是在每个具有登录表单的页面中包含login.php文件,并将其发布到同一页面。所以你根本不需要任何重定向。
这可能不是一个好的可扩展和可维护的解决方案,但它很简单。这一切都取决于你正在写什么样的应用程序。但是你说你是php的新手,所以你可以这样开始。你总能在以后看上去......