当用户尝试登录我的网站时,我会将表单发布到/login
如果没有电子邮件密码匹配,登录脚本会重定向到/login/tried-to-login
然后我使用" login/
之后的任何内容来显示页面上显示的内容(例如"请再试一次")。
我刚刚在另一个SO question中读到了一个使用会话存储此类详细信息的人:
$_SESSION['bad_login'] = ...
我或许会使用' status'
$_SESSION['status'] = 'login failed', $_SESSION['status'] = 'no password'
。
会话是更好的方法吗?要始终将用户发送到/ login?哪一个更好/更干净的代码?我想我认为在网址中包含该消息是用户友好的吗?将其保留在会话中会有什么收获?
答案 0 :(得分:2)
假设用户尝试登录,登录失败,输入密码错误。您可以将它们重定向到login.php?status=bad+password
,或者您可以设置$_SESSION['status']='bad password';
然后重定向到login.php,并显示该消息。
那有什么区别?
主要且最明显的是,使用参数方法(即login.php?status=bad+password
),有人可以随时访问该URL并查看该消息,而实际上甚至没有尝试登录。使用会话方法,您只能在实际尝试登录后看到该消息。
显然,无论何时你做echo $_REQUEST['status'];
这样的事情,你都可以直接打印用户输入而无需验证。用户可以在那里注入一些HTML。但是,如果您使用硬编码消息设置会话变量,则可以安全地执行echo $_SESSION['status'];
而无需担心验证。 (切勿在不进行消毒/验证的情况下将用户输入直接放入会话中。)
使用会话方法,您可以在刷新登录页面时删除消息的显示。
if(isset($_SESSION['status']))
{
echo $_SESSION['status'];
unset($_SESSION['status']);
}
现在在刷新时,由于您在打印后删除了该值,因此您不会再次显示该消息。但是使用URL参数方法,每次刷新页面都会再次显示消息,尽管用户实际上还没有尝试再次登录!
答案 1 :(得分:0)
我建议 - 在Facebook中存储邮件是一种更好的方式,就像facebook like this
一样