PHP如何将文件夹和网站内容限制为不同的用户


PHP how to restrict folder and website content to different users?

我已经在谷歌上搜索了好几天,遇到了不同的保护文件夹的方法(htaccess,使用带有密码的PHP页面),但这些方法并不能解决我的问题。

问题是:我需要有一个网站,不同的客户只能访问他们的内容。Client-A需要能够访问其所有Flash内容和网站。Client-B和Client-C也需要这样做,但它们都不能访问彼此的内容(即使直接链接到内容)。用户名/密码系统无法工作,因为每个客户端都有400-1000个用户,而我和客户端都没有时间管理所有这些用户。

我研究了htaccess和htpasswd,但我不喜欢使用任何用户名/密码组合。理想情况下,我想要一个"秘密单词"或"密码短语",我可以从iPad应用程序或Air程序传递到服务器,以获得我需要的内容。有人对处理这个问题的最佳方法有什么想法吗?

编辑:为了简化事情。。。我希望在我的web根目录上有HTML网站和Flash swf,并且能够向用户显示它们。我怎样才能做到这一点?我有一些HTML网站使用相对链接,所以使用php的readfile()会导致这些网站中断,因为这些链接不正确。

您使用的是什么RDBMS?

有了mod_authn_dbd和基本的身份验证,你就可以做到这一点

像这样的

AuthType Basic
AuthName "My Server"
AuthBasicProvider dbd
# core authorization configuration
Require valid-user
# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"

如果您可以控制发送请求的软件,您可以为每个标识用户的请求添加自己的X头。

使用apache_request_headers(),您可以从请求中获得自己的请求标头:http://www.php.net/manual/en/function.apache-request-headers.php

===============

第一条评论后编辑:

一些代码例如:

globals.php

$headers = apache_request_headers();
$key = $headers["X-Authorization-Key"];
$authorized = checkAuthorization($key);
if(!$authorized) {
    header('HTTP/1.1 403 Forbidden');
    echo "Access denied!";
    exit;
}
//... db connection or something else to get user specific definitions, paths, ...
//e.g.:
$user = $users[$key];
define("CONTENT_PATH", "/var/www/mypage/data/".$user);
function checkAuthorization($key) {
    //... db connection or something else where the authorization-information are stored in
    //check whether the $key is in the auth-info and return true / false for the result
    return true; //or false
}

在顶部的每个脚本中:

<?php
require_once("globals.php");
//... work with the user specific definitions, paths
include(CONTENT_PATH."/...");
//...

当用户创建登录帐户时,他们可以选择使用的组。然后,当显示页面信息时,它会显示正常页面,但其中包含权限名称。您必须构建3个独立的内容页面,但他们只能看到所选组的内容。

家庭组1.php家庭组2.phphomebup3.php

如果用户在第一组,那么直接显示的将是home"group".php。它会调用他们所在站点上的组。