如何使用会话ID进行身份验证

时间:2011-04-12 08:13:43

标签: php security session

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

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

我不认为我正在做的身份验证是正确的方法。我觉得session_id可以为安全事项做些什么。

还有一个疑问 - 当我按照我提到的方式使用会话变量时,这些会话变量很容易被黑客攻击

我该怎么办?

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

不确定。
$_SESSION['user_id']只是您需要的变量。

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

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

答案 4 :(得分:-1)

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

希望它有所帮助。