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