我之前在这里问过这个问题,但用户CheekySoft指出我是在“询问如何实施我提出的解决方案”,而我应该只是“陈述我的问题并寻求解决方案的想法”。所以这里。
在 linux 服务器上,我的文件设置如下
/home
├── user1
│ ├── [-rwx------] index.html
│ └── [-rwx------] index.php
└── user2
├── [-rwx------] index.html
└── [-rwx------] index.php
如果我有 Apache 虚拟主机设置在
<Directory /home/user1>`
<Directory /home/user2>
然后 [any] 用户可以转到www.example.com/user1/index.html
或www.example.com/user2/index.html
。但是,这些文件的权限是0700
,因此无法通过 Web 访问它们。正是出于这个原因,我正在使用 suPHP。
为了争论,假设index.php
只有以下内容
索引.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
。但是,user1 也可以去www.example.com/user2/index.php
查看 user2 的index.html
页面,反之亦然。
处理这个问题的自然方法是通过PHP 会话。对页面的所有请求都被重定向到主页(即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 登录身份验证
任何人都可以为我的问题提供解决方案吗?