Я задал этот вопрос перед here но пользователем CheekySoft указал, что я «с вопросом, как реализовать мое предложенного решения», где вместо этого я должен просто «изложить свою проблему и попросить идеи решения» , Так вот.Нужна помощью реализации PHP сессий в suPHP
На сервере Linux У меня есть файлы, настроенные как так
/home
├── user1
│ ├── [-rwx------] index.html
│ └── [-rwx------] index.php
└── user2
├── [-rwx------] index.html
└── [-rwx------] index.php
Если у меня есть Apache виртуальные хосты настроенные на
<Directory /home/user1>`
<Directory /home/user2>
Тогда [любой] пользователь может перейти к 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
. Аналогично, пользователь2 может перейти на www.example.com/user2/index.php
для просмотра index.html
. Тем не менее, пользователь1 может также перейдите на страницу www.example.com/user2/index.php
, чтобы просмотреть страницу пользователя user2's index.html
и наоборот для пользователя2.
Естественный способ справиться с этим через 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