PHP 用户认证逻辑

标签 php mysql

我正在尝试了解如何为我正在尝试做的事情设置正确的逻辑。

我想要一个网站,它可以根据用户类型/类别提供对特定 URL 的访问权限。因此,如果用户 A 订阅了 URL 1、2、3,他将无法访问用户 B 订阅的 4、5、6。

我可以很容易地编写一些东西,在填充一系列链接之前检查用户是否登录,但我不希望与其他用户共享这些链接。

我想我可以使用 mysql 查询来选择用户匹配特定组或类型的位置,并将此查询放在每个页面中,因此在加载内容之前它会检查数据库以确保正确的用户正在获取访问它。

我想知道的是 1. 这是正确的方法吗?和 2. 我将如何构建我的数据库?我是否应该拥有它以便每个页面(或特定类型的内容)都是它自己的表格并且用户在注册时进入该表格?或者是否有另一种从逻辑上和性能角度来看可能更好的结构?

最佳答案

您在用户组方面走在正确的道路上。并且每次用户加载页面时都进行选择会使您的性能很差,但这是我曾经用过非常相似的解决方案。

首先创建一个包含用户组的表(以防您稍后需要添加组),然后向您的用户表添加一个索引以引用每个用户的组。

然后在您的登录查询中选择用户组的 ID 以及用户并传递,并将其存储到 $_SESSION var 中,就像您对其他两个字段所做的那样,我们称它为 $ _SESSION['groupid']

然后在您要显示正确链接的页面上混合使用 php 和 html。这部分将取决于你有多少组,如果他们很少(例如管理员、版主、用户),应该这样做:

<yourhtml pre-links>
<? if($_SESSION['groupid']==1)
{
echo "link 1" //formated html links goes here, maybe pre-stored links
}
elseif ($_SESSION['groupid']==2)
{
echo "link 2"
echo "link 3"
}
elseif ($_SESSION['groupid']==3)
{
echo "link 3"
echo "link 1"
}
?>
<yourhtml post-links>

希望这对您有所帮助,不知道这是否是您真正想要的,但您可以通过这种方式展示它们而无需更改页面或任何内容

关于PHP 用户认证逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18650125/

相关文章:

mysql - SQL - HAVING 子句中的多行

mysql - 查询长时间卡在 tmp 表中复制

php - 仅从 cron 作业调用 php 脚本 - 拒绝所有其他 ips

php - 从 codeigniter 中的文件夹加载模型

javascript - 以html形式输入ID并在同一页面从MySQL数据库加载相关数据

mysql - 如何确保使用 docker-entrypoint-initdb.d 中的脚本初始化 docker 容器中的 MySQL?

mysql - 使用 GROUP_CONCAT 选择多对多关系

mysql - Sequel pro 无法再连接

php - 面向过程程序员的 OOP

php - CakePHP 中的 JavaScript