php中受密码保护的目录


password protected directory in php

我正在创建一个web目录,我已经创建了一个系统,以便管理员可以向网站添加内容。问题是内容是静态的,并且正在添加到目录中,因为我们想像mysite.com/test/content/ab.html一样显示它,所以我如何使用php允许通过php访问该url,用户详细信息在mysql数据库中。我的意思是,如果用户已经登录并拥有权限,那么他可以看到mysite.com/test/content/ab.htmlcontent中的任何文件,但如果他/她已经注销,那么它应该重定向。

编辑:我已经使用htaccess解决了一半的问题,现在它检查用户是否登录,但如果用户登录,我该如何重定向?这是我用的htaccess

# For security reasons, Option followsymlinks cannot be overridden.
#Options +FollowSymLinks +ExecCGI
Options +SymLinksIfOwnerMatch +ExecCGI
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  !('.php)$
    RewriteRule (.*)  /index.php [QSA]
</IfModule>

如果不知道如何让用户登录,很难提供帮助(您必须这样做,您至少知道他们登录了,以及他们是哪个用户)我将假设一个基本的登录系统。

我做这件事的方式是基本的login.php页面,如果登录成功,设置一些基本会话(没有密码、用户名或敏感信息)并设置他们的用户级别(这样你就可以管理他们可以访问的内容)

例如,如果登录=成功:

$_SESSION['loggedin']['userlevel'] = $FromDatabase['userlevel'];

然后在包含在每个页面中的包含文件中(header.php或config.php)我有(我的config.php是在发送任何标题/浏览器输出之前等)

  if (!isset($_SESSION))
    {
      session_start();
    }
    $strUserLevel = false;
    if (isset($_SESSION['loggedin']['userlevel']))
      {
        $strUserLevel = $_SESSION['loggedin']['userlevel'];
      }

然后我可以在整个网站上使用这个来控制他们的访问,:

    if($strUserLevel == false)
      {
        header("location: login.php");
        die();
      }
    //or wherever you want to redirect them
    //or just say you need to be logged in to view this, link to login page (etc)

  if ($strUserlevel < 3) // or whatever level they need for this page
    {
      echo "You cannot edit this page";
      exit();
    }
  else
    {
      //a form or whatever
    }

以上只是一些基本的例子。我的代码有点复杂,因为我总是在includes中使用config.php,并在那里设置全局变量以在整个站点范围内使用,并且有一个基本的登录检查功能(检查他们的当前IP是否与我在登录时检查并存储在DB和其他东西中的IP匹配)。

另一种权限控制方法是使用mysql表。因此,如果您有TABLE tblEditPageAB,任何名字在该表的一行中的人都可以编辑该页。虽然这更多地用于管理控制,即您有tblAdministrateOtherUsers-同样,任何在该表中有其姓名/详细信息的人都可以管理其他用户(或其他)

要检查这一点,只需查询即可,如果没有结果,则无法进行查询。

同样,最好的方法取决于你的网站、场景、你需要编辑的页面数量,以及它们是否是动态创建的,等等。有各种各样的方法,但希望我能给你思考的食物,并帮助你:)