身份验证一次并使用db session进行身份验证后?

时间:2013-01-15 13:12:43

标签: php validation session authentication login

目前我有代码,用于对用户进行身份验证并在db session中保存身份验证用户名和密码,并在每次请求时进行验证。

我正在考虑将验证方法更改为仅对用户进行一次身份验证,并在db会话中保持成功身份验证,但如果他是会话用户且已经过验证,则不要再次验证用户。

这种新方法会更安全吗?或者我应该只是在每个请求上验证用户,即使它已保存在会话中?

2 个答案:

答案 0 :(得分:1)

你应该这样做:

  • 在您的数据库中保留一个用户名和加密密码表(加密=至少盐渍和散列)
  • 让您的用户向您发送用户名和密码,可能是哈希客户端,然后再将其更改为哈希
  • 检查凭据一次,并在会话中设置一些内容,将用户标记为已通过身份验证

您永远不应该保留密码明文,也不应该在会话表中存储额外的身份验证数据。即使您在每个请求中检查它们,您实际上只是检查您的远程用户(即他的cookie)是否在您的会话中第一次提供了正确的用户名和密码...如果您刚设置,则可以获得相同的确切结果会话中的变量......

答案 1 :(得分:0)

不是将用户的身份验证状态存储在数据库中,而是使用cookie。使用一个模糊的变量名称来存储加密的unix时间戳身份验证,以使观察者更难理解。这样做的好处是,如果您使用可逆的密码,则需要进行简单的计算以检查会话的到期时间。

这也消除了一大堆数据库访问,这会导致速度变慢。

正如@Palantir所提到的,在数据​​库中以加密方式存储密码。当用户提供密码时,执行相同的加密并比较存储的版本