我问这个问题here之前,但用户CheekySoft指出,我在“问如何实现我提出的解决方案”里,而不是我只是应“说明我的问题,并要求解决思路” 。所以在这里。需要帮助suPHP
在Linux服务器我已经建立了像这样
/home
├── user1
│ ├── [-rwx------] index.html
│ └── [-rwx------] index.php
└── user2
├── [-rwx------] index.html
└── [-rwx------] index.php
的文件如果我在
<Directory /home/user1>`
<Directory /home/user2>
设置Apache虚拟主机那么[任何]用户可以去www.example.com/user1/index.html
或www.example.com/user2/index.html
。但是,这些文件的权限是0700
,因此,它们无法通过网络访问。正因为如此,我使用suPHP。
为了讨论的方便,可以说index.php
只有在它
的index.php如下:现在
<?php
echo file_get_contents('index.html');
exit();
?>
,与suPHP成立,USER1可以去www.example.com/user1/index.php
查看index.html
。同样,user2可以去www.example.com/user2/index.php
查看index.html
。但是,用户1可以也可以转到www.example.com/user2/index.php
查看用户2的index.html
页面,反之亦然user2。
处理这个问题的自然方法是通过PHP sessions。所有对页面的请求都被重定向到主页面(即www.facebook.com
),用户将根据数据库进行验证,然后重定向到正确的页面(请参见下图)。
的用户会去一个页面(即www.example.com/page1.html
),然后会有页面1 硬编码的一部分,以确保有效的会话存在。如果存在,则加载页面。如果它不存在,用户将被重定向到,在这种情况下,index.html
。在他们登录并建立有效会话后,它们将被重定向回原始页面。我们可以修改index.php
开展了这一点:
indexValidate.php:
<?php
//this is purely pseudo code, I can't guarantee it will work
session_start();
require_once 'Session_Validator.php';
$sv = new Session_Validator();
$sv->validate($un, $pwd);
echo file_get_contents('index.html');
exit();
?>
然而,在我的设计,这些页面(page1.html
,page2.html
...)是在用户自己的目录(index.html
,index.php
),因此,服务器不能要求他们有这个硬编码部分检查有效的部分。用户可以简单地编辑该文件以删除此部分。当然,这对用户来说是愚蠢的,但我不希望用户必须修改他们的每一个文件来在顶部有一个会话检查部分。我希望这是无缝的。
的几个注意事项:
- 我可以使用Apache来所有请求重定向到一个单一的
validateUser.php
脚本,验证用户,然后,如果有效,调用请求的原始脚本。但是,这有一个suPHP现在已经切换到用户的副作用,最有可能的var-www
- 我不想使用Apache web login authentication
任何人都可以提供一个解决我的问题?
我相当有信心我的问题没有解决方案http://stackoverflow.com/a/9561335/654789 – puk 2012-03-06 04:39:42