我問這個問題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