Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何识别登录用户?_Php - Fatal编程技术网

Php 如何识别登录用户?

Php 如何识别登录用户?,php,Php,我只是为我的网站做了注册表格,但是我不知道如何记住用户是通过会话登录的。我想我可以简单地将他的IP在身份验证时存储在我数据库的一个表中,并在他注销时将其删除 这种方法有什么不对吗?如果有的话,我应该做什么来代替它呢?通常你会这样做 $_SESSION['logged_in'] = 1; 当用户登录时,检查 if (isset($_SESSION['logged_in']) { ... 查看页面上的用户是否已登录 不需要数据库。您可以在用户登录会话时输入所需的任何详细信息,如用户的用户名或其他

我只是为我的网站做了注册表格,但是我不知道如何记住用户是通过会话登录的。我想我可以简单地将他的IP在身份验证时存储在我数据库的一个表中,并在他注销时将其删除


这种方法有什么不对吗?如果有的话,我应该做什么来代替它呢?

通常你会这样做

$_SESSION['logged_in'] = 1;
当用户登录时,检查

if (isset($_SESSION['logged_in']) { ...
查看页面上的用户是否已登录

不需要数据库。您可以在用户登录会话时输入所需的任何详细信息,如用户的用户名或其他标识符


你的方法的一个问题是,大多数人没有明确地退出网站,他们只是关闭选项卡/窗口,你不知道什么时候会发生这种情况。另一个原因是IP地址不能唯一标识用户。

在登录中,您可以设置会话变量:

$_SESSION['is_logged_in'] = true;
然后在需要登录的页面上进行检查:

<?php
  if (!isset($_SESSION['is_logged_in']))
  {
    // redirect to login page
  }
?>

这是一个非常简单的方法,但会让你从正确的方向开始。

是的。
当用户在您的站点上时,他拥有的IP可能会更改,或者实际上可能是多台计算机(使用NAT)的IP。基本上,任何网络都可以有多台使用同一IP的计算机,如果一台计算机上的一个人登录,同一网络上的另一台计算机也会登录

通常的方法是在会话中存储他的用户信息。此会话仅标记他的计算机(因为会话id存储在cookie中)


另外,为了减少对数据库的查询,我通常在他登录时将他的用户名、id等加载到会话中,然后在他注销时清除会话。

如果您使用的是PHP,则可以执行以下操作:

 $_SESSION['logged_in_user'] = $username;
 ...
  // When you want to display something that is only for logged in users you do this:
  if (!empty($_SESSION['logged_in_user']))
  {
    // Authenticated user
    ...
  }
  else
  {
   // Not authenticated user
   ...
  }
当他注销时,你从会话中删除用户名

if(isset($_SESSION['logged_in_user']))
{
  session_unset($_SESSION['logged_in_user']);
}

这有几个问题。。。在使用键之前不检查它是否存在(PHP注意),在它可能不存在时将其否定,并将其与
true
进行比较,而否定它会导致与注释所暗示的逻辑相反。您可以通过编写
if(!empty($\u SESSION['logged\u in\u user'])来简化此代码
这将同时检查变量是否已设置以及其值是否为空。