【问题标题】:how to use session ids for authentication purpose如何使用会话 ID 进行身份验证
【发布时间】:2011-08-03 16:26:26
【问题描述】:

我只使用会话变量$_SESSION['user_id']$_SESSION['passwd']来存储用户登录时的id和密码。

每次用户移动到新的 php 页面进行身份验证时,我都会使用数据库检查这两个变量。其实我不知道session_id()

我不认为我正在做的身份验证是正确的方法。我觉得session_id 需要做一些安全的事情。

还有一个疑问——当我按照我提到的方式使用会话变量时,这些会话变量是否很容易被破解

我该怎么办?

【问题讨论】:

  • 通过一些关于会话管理、PHP 身份验证等的教程会更有帮助

标签: php security session


【解决方案1】:

您不需要在每次用户移动到新的 php.ini 时检查。 例如,一旦用户进行身份验证,请将 session_id 存储在 $_SESSION['session_id'] 中。之后,您需要做的就是检查是否设置了$_SESSION['session_id']。如果是,则表示用户已“登录”。

希望对你有帮助。

【讨论】:

  • 这个 $_SESSION['session_id'] 是否容易被黑客入侵并被黑客更改以查看其他用户的页面??
  • 如果你想让它更安全,请使用种子字符串、用户名和 session_id 创建一个密码,并将其存储在 $_SESSION['auth'] 例如......所以你必须检查是否设置了 $_SESSION['auth'] 以及它的值是否与密码匹配....希望它有所帮助。
  • 我有点理解。锄头将其与密码匹配。请给个小解释
  • if (isset($_SESSION['auth']) && ($_SESSION['auth'] == md5($username.$_session_id.$seed)) { echo "用户登录" ; }
  • 我开始检查它是​​否已设置,但如何将它与密码匹配是我的问题。我可能听起来很傻,因为我是初学者
【解决方案2】:

只要不存在其他漏洞,攻击者就无法轻易更改或读取您的 $_SESSION 变量,但出于多种原因,在服务器上存储密码的时间过长通常是一种不好的做法。

用户登录时检查一次密码就足够了。之后您只需要在会话中存储经过身份验证的user_id即可。您必须知道会话属于谁,才能向该特定用户授予必要的权限。但是您确实已经知道用户提交了正确的密码,否则您一开始就不会将他的 user_id 存储在会话中。

【讨论】:

    【解决方案3】:

    当然。
    $_SESSION['user_id'] 只是您需要的变量。

    if (empty($_SESSION['user_id'])) {
       die("access denied");
    }
    

    检查用户是否通过身份验证。

    【讨论】:

      【解决方案4】:

      您应该只对数据库进行一次身份验证,然后将结果存储在 $_SESSION 变量中。示例:

      if ($user_and_pass_ok) {
        $_SESSION['user_logged_in'] = true;
      }
      

      【讨论】:

        【解决方案5】:

        对于基本身份验证,您存储用户 ID 的方法很好。 但是,当用户通过身份验证时,您不需要存储密码。

        【讨论】:

          猜你喜欢
          • 2020-06-12
          • 2022-01-16
          • 2021-10-11
          • 2013-12-29
          • 2015-05-18
          • 2014-06-08
          • 2017-03-15
          • 2017-06-21
          • 1970-01-01
          相关资源
          最近更新 更多