$ _SESSION ['user_id']足以检查PHP中的登录?

bey*_*ski 5 php authentication login

当用户登录网站时,我只保存user_id在SESSION中以便稍后检查用户是否登录.

if(!empty($_SESSION['user_id'])){
  ....
Run Code Online (Sandbox Code Playgroud)

这足以保障安全吗?

Moa*_*Plz 12

这完全取决于该变量如何进入会话以及您管理会话的程度.

在处理网站安全性和用户凭证时,始终要考虑的一个案例是用户可以在公共环境中登录您的网站然后离开.他会在多长时间内登录?已登录时敏感信息的可访问性如何?

如果你有一个相对较短的会话超时,并确保你正在管理什么使它成为$ _SESSION ['user_id'],那么这是一个合理的方法.实际检查$ _SESSION ['user_id']中的内容可能更好,但这不会比你现有的有很大的改进.

我建议考虑的主要问题是,如果用户想要更改其帐户的详细信息/访问过度敏感数据,则需要再次登录凭据(您不希望陌生人更改用户的登录名吗? ).虽然这对普通用户来说可能有点麻烦,但它确实为您的应用程序增加了一个很好的安全措施.

  • +1用于要求帐户详细信息更新的登录凭据. (3认同)

Com*_*eek 7

只有在有人访问会话文件的情况下才能更改该值.

所以通常是的.

但我宁愿使用isset():

function loggedIn()
{
  if (isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']))
    return true;
  return false;
}
Run Code Online (Sandbox Code Playgroud)

因为如果用户id为0,empty()也会返回true!