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

8

我是新手,刚开始接触php Sessions。我的用户数据很少且不太敏感,但当然我仍希望网站安全。我已经在数据库中存储了他们的密码哈希值和盐。

我是否需要在每个页面上都使用密码验证用户,还是这太过于繁琐?换句话说,如果他们已经成功“登录”,并且我已将他们的用户名存储在php会话中,那么他们能够自由地浏览网站,让网站知道他们是谁,这样就足够了吗?

我之所以问这个问题,是因为似乎将用户的密码存储在会话中可能不是最好的想法。这是真的吗?

6个回答

9
您不需要在每个请求上进行身份验证,但您需要在每个请求上进行授权。
身份验证是指您将用户的用户名/密码与数据库进行验证。一旦他们成功通过身份验证,您只需要在会话中存储他们的用户ID(或用户名)即可。
在每个后续请求中,检查当前会话是否有权查看所请求的内容。在您的情况下,您可能只需要确保会话中有一个有效的用户ID…您不必对数据库做任何事情。
您可以使用类似以下函数的函数来在每个请求上进行授权:
function isAuthorized() {
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0);
}

您可以通过在数据库中管理自己的会话数据来使其更加安全,这样您就不必对cookie抱有太多信心,因为它们可能会被(恶意)用户交易/盗窃等。但是对于大多数Web应用程序来说,这通常是过度保护。


5
不要存储密码。相反,存储一个身份验证令牌,在单独的表中检查其存在性。

2

我不会把密码存储在会话中,你只需要在会话中存储他们已经登录即可。

$_SESSION['uerlogged'] = $mytoken;

每次页面加载时,检查$_SESSION ['userlogged']是否设置。

您可能还希望考虑添加会话劫持的预防措施,请参考 - PHP:使用作为cookie存储的令牌防止会话劫持?


1

在会话中存储密码其实并不是必要的。你应该使用状态标志来显示用户当前是否已经通过身份验证,以及一些定义用户身份和相关信息的对象。


0

将密码存储在会话中与用户登录后将用户名存储在会话中没有任何区别,因此不要存储密码。

它将像存储的用户名一样工作,这已足够(即使使用标志也可以)。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接