在会话或网址中存储“糟糕登录”?

时间:2014-04-09 05:11:17

标签: php session login

当用户尝试登录我的网站时,我会将表单发布到/login 如果没有电子邮件密码匹配,登录脚本会重定向到/login/tried-to-login 然后我使用" login/之后的任何内容来显示页面上显示的内容(例如"请再试一次")。

我刚刚在另一个SO question中读到了一个使用会话存储此类详细信息的人:

$_SESSION['bad_login'] = ...

我或许会使用' status' $_SESSION['status'] = 'login failed', $_SESSION['status'] = 'no password'

会话是更好的方法吗?要始终将用户发送到/ login?哪一个更好/更干净的代码?我想我认为在网址中包含该消息是用户友好的吗?将其保留在会话中会有什么收获?

2 个答案:

答案 0 :(得分:2)

假设用户尝试登录,登录失败,输入密码错误。您可以将它们重定向到login.php?status=bad+password,或者您可以设置$_SESSION['status']='bad password';然后重定向到login.php,并显示该消息。

那有什么区别?

  1. 主要且最明显的是,使用参数方法(即login.php?status=bad+password),有人可以随时访问该URL并查看该消息,而实际上甚至没有尝试登录。使用会话方法,您只能在实际尝试登录后看到该消息。

  2. 显然,无论何时你做echo $_REQUEST['status'];这样的事情,你都可以直接打印用户输入而无需验证。用户可以在那里注入一些HTML。但是,如果您使用硬编码消息设置会话变量,则可以安全地执行echo $_SESSION['status'];而无需担心验证。 (切勿在不进行消毒/验证的情况下将用户输入直接放入会话中。)

  3. 使用会话方法,您可以在刷新登录页面时删除消息的显示。

      if(isset($_SESSION['status']))
      {
        echo $_SESSION['status']; 
        unset($_SESSION['status']);
      } 
    
  4. 现在在刷新时,由于您在打印后删除了该值,因此您不会再次显示该消息。但是使用URL参数方法,每次刷新页面都会再次显示消息,尽管用户实际上还没有尝试再次登录!

答案 1 :(得分:0)

我建议 - 在Facebook中存储邮件是一种更好的方式,就像facebook like this

一样
相关问题