我想要做的是我认为足够简单的事情,如果我执行以下操作,但它只是为已经很大的项目添加了更多行代码,我认为我犯了一个错误存储用户可能具有的所有类型错误的.php页面会使错误系统变得简单,但事实并非如此。
让我举一个例子解释一下。
1)用户在登录时忘记密码
login?error=wpu
error.php页面包含以下内容
<?php $denyaccess_nosession = "Sorry you tried to access a page that requires you to be login.";
$wpu = "You have either entered a wrong email address, password or both. Please try again! <a href='forgot' title='ISOTE Forgot Details'>Click here if you forgot your login details</a>";?>
但我必须将以下内容放入index.php才能使其正常工作
if($_REQUEST['error']){
extract($_GET);
switch ($error) {
case 'wpu':
$smarty->assign('error',$wpu);
break;
default:
$smarty->assign('error',$denyaccess_nosession);
break;
}
}
else{
$smarty->assign('error',$denyaccess_nosession);
}
肯定有我们离开只有$ error并从error.php加载正确的错误
答案 0 :(得分:0)
您可以使用会话而不是依赖$_GET
。例如,如果用户输入了错误的电子邮件或错误的密码,您可以执行以下操作:
$access = functionThatChecksEmailAndPassword($email, $password);
if($access)
{
//Access Granted
}
else
{
//Redirect the user to an error page
$_SESSION['error'] = true;
$_SESSION['errMsg'] = "You have either entered a wrong email address, password or both. Please try again!"
header("Location: <path to error.php>");
exit();
}
然后,在error.php中,您可以检查是否发生了错误。
session_start();
if(!$_SESSION['error'])
{
//Show a generalized error message
}
这是用户手动输入url到错误页面或意外错误。通常你无法控制的东西,你不会提供任何细节
如果$_SESSION['error']
已设置且为真,您可以继续并以某种方式显示错误消息
else
{
$msg = $_SESSION['errMsg'];
unset($_SESSION['error'];
unset($_SESSION['errMsg']);
}
请注意,您可以更进一步,创建一个类来存储所有错误消息,如下所示:
class ErrorMessages
{
const WRONG_EMAIL_PASSWORD = 'You have either entered a wrong email address, password or both. Please try again!';
const NO_ACCESS = 'You have no permission to view this page';
}
修改强>
然后您可以像这样使用该类:
$_SESSION['error'] = true;
$_SESSION['errMsg'] = ErrorMessage::WRONG_EMAIL_PASSWORD;
header("Location: <path to error.php>");
exit();
如果您在处理用户登录的文件开头包含了ErrorMessage
类,那么
这完全取决于你。不要忘记,您不应该显示可能被恶意用户用作漏洞的详细错误。