在PHP会话中存储用户密码是否常见?

时间:2010-07-01 15:25:16

标签: php security session

这里有新的php Sessions。我存储的用户数据非常小,而且不是很敏感但当然我还想要一个安全的网站。我已经使用salt将他们的密码哈希存储在我的数据库中。

我是否需要使用他们的密码在我网站的每个页面上验证用户,或者是否过度杀伤?换句话说,如果他们已经成功“登录”并且我已经在php会话中存储了他们的用户名,那么他们就可以漫游,网站知道他们是谁?

我问,因为在会话中存储用户密码似乎不是最好的主意。这是真的吗?

6 个答案:

答案 0 :(得分:8)

您不需要对每个请求进行身份验证,但您需要在每个请求上授权

身份验证是您根据数据库验证用户的用户名/密码的位置。成功通过身份验证后,您只需在会话中存储其用户ID(或用户名)。

在每个后续请求中,检查以确保当前会话已授权以查看请求的内容。在您的情况下,您可能只需确保会话中存在有效的用户ID ...您无需对数据库执行任何操作。

您可以使用类似于以下内容的功能对每个请求进行授权:

function isAuthorized() {
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0);
}

通过在数据库中管理自己的会话数据,您可以更加安全,然后您就不必非常相信cookie(恶意)用户可以交易/窃取/等等。但对于大多数网络应用来说,这通常是过度杀伤。

答案 1 :(得分:5)

不要存储密码。相反,存储一个可以在单独的表中检查是否存在的身份验证令牌。

答案 2 :(得分:2)

我不会在会话中存储密码,您只需存储他们已登录会话。

$_SESSION['uerlogged'] = $mytoken;

然后每个页面加载检查以查看是否设置了$_SESSION['userlogged']

您可能还需要考虑添加会话中的预防措施请查看 - PHP: Preventing Session Hijacking with token stored as a cookie?

答案 3 :(得分:1)

不一定要在会话中存储密码。您应该有状态标志,以显示它们当前是否经过身份验证以及某种定义用户身份的对象及其相关信息。

答案 4 :(得分:0)

在会话中存储密码与用户登录后在会话中存储用户名没有任何不同,因此请勿存储密码。

它只是作为存储的用户名工作,这足够了(即使是一个标志也可以)。

答案 5 :(得分:0)

用户无法修改会话,您只能在那里存储用户名,并相信它始终是正确的。