PHP用户认证逻辑

时间:2013-09-06 04:50:06

标签: php mysql

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

我希望有一个网站可以根据用户类型/类别访问特定的网址。因此,如果用户A订阅了URL 1,2,3,他应该无法访问用户B订阅的4,5,6。

我可以轻松地编写一些内容,以便在填充一系列链接之前检查用户是否已登录,但我不希望链接与其他用户共享。

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

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

2 个答案:

答案 0 :(得分:2)

您正在使用用户组的正确路径。并且每次用户加载页面时进行选择都会给你带来糟糕的性能,但这是一个我用过的非常相似的解决方案。

首先创建一个包含用户组的表(如果以后需要添加组),然后在users表中添加一个索引以引用每个用户的组。

然后在您的登录查询中选择用户组的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>

希望这会让你感到困惑,不知道那是不是你真正想要的东西,但这样你就可以在不改变页面或任何东西的情况下展示它们

答案 1 :(得分:0)

我对此知之甚少。如果我是你,那么,

我将创建包含链接的表

链接

 link_id   link
   1       abc.php
   2       cde.php
   3       efg.php

user_details

 user_id username   password 
    1     login1   login_pass
    2     login2   login_pass2

和一个将用户链接定义为

的表

<强> user_links

  id  user_id  link_id 
   1     1       1
   2     1       2 
   3     2       3 

从这些表中,使用联接,我将获得login1用户链接abc.php和cde.php的用户链接

您可以映射所有其他链接。

为了检查用户权限,您可以编写一个函数来检查所选路径是否已经与已登录用户(您可以在会话中存储的用户ID)进行映射。