如何安全地管理连接的用户

时间:2016-01-27 20:14:52

标签: php mysql angularjs cookies

我认为我认为dout如何做到这一点:

当我的用户连接时,在检查他是否具有良好的用户名/密码后,会创建会话密钥(随机长字符串)并将其放入数据库。会话内放置相同的session_key。

如果用户在没有登录的情况下离开我的应用程序,当他回来时,如果他的session_key与数据库中的一个匹配,则用户是O.K并将以具有该session_key的用户身份连接。如果不是,则会话关闭,用户被重新路由以进行登录。如果没有问题,则创建一个新的session_key(替换旧的)。

我认为这将是O.K.,除了两件事:

- 如何在一段时间后使session_key从DB中消失?我想我应该在服务器上执行一些代码,但是如果没有人在某个时刻使用我的应用程序,我如何在服务器上执行代码呢?

- 如果它只是session_key,是否可以使用cookie?

- 是O.K.只检查数据库中是否存在与会话中的session_key对应的session_key,还是应该使用其他东西来确定?我将生成一个随机的长字符串并使用与密码相同的方式加密它,所以我认为它足够安全,并且session_key可能不会相同。

- 使用用户名从DB获取数据,是否为O.K.使用session_key(getStuffBySessionKey())?

1 个答案:

答案 0 :(得分:0)

  

如果我的用户访问Cookie并更改用户名,该怎么办?

无需在cookie中存储用户名。 Cookie应具有会话密钥信息。当用户尝试登录时,您将通过db query获取用户名。如果用户更改其cookie中的会话密钥值,则它将不再匹配数据库中的活动会话,并且他们将不得不重新登录。它与清除cookie基本相同。

  

除了用户名和session_key之外,我还会将用户权限放在cookie中。我需要知道用户是管理员,创建者还是访问者。

这些也应该存储在数据库中,而不是存储在cookie中。

  

还有其他方法可以检查用户是否在应用程序中仍未尝试更改任何内容?

不,您应该根据用户的每个请求检查有效的活动会话。如果没有会话cookie,或者cookie与有效会话不匹配,请将它们重定向到登录页面。

正如其他人所指出的那样,为这一切使用PHP的内置会话是明智之举。