2012-09-23 57 views
0

我想爲http://models.example.com/*所有請求改寫爲http://models.example.com/handler.php?requested_url=*Mod_rewrite爲會話控制「handler.php」?

然後,handler.php會檢查我的$_SESSION變量,看看用戶是否登錄。如果用戶已登錄,然後handler.php會重定向到requested_url

如果用戶未登錄,則handler.php將使用正則表達式來查找requested_url與許可規則數組(ruleList.php)之間的匹配項。如果handler.php看到允許未登錄用戶訪問requested_url的規則,則它將重定向到requested_url,否則它將重定向到登錄頁面。

我的問題是這樣的:我如何區分初始請求和重定向? (以避免無限循環)。我可以附加一個變量,如&already_processed=true,但這是完全不安全的。

我會使用mod_auth,但問題是我希望可以通過網站的管理面板(ruleList.php)設置權限。權限規則可能很複雜,而且設置它們的人不應該在服務器的httpd.conf文件中徘徊。 mod_auth的另一個問題是更改需要重置服務器。

我很感謝在這個問題上的任何輸入!

回答

1

...會重定向到...

一個重定向始終是不安全的。它會將操作傳遞迴客戶端(瀏覽器),然後結束請求。

這意味着,下一個請求是一個新的請求,Apache和PHP腳本沒有任何信息,如果該請求是新的或不,直到你把它添加到會話

但是,如果您希望您的apache web服務器爲資源提供服務,則需要驗證apache內的會話。這意味着您需要擴展apache,以便您可以檢查一些環境變量或類似的條件以進行重寫。

正如你可以想象的,這有點複雜。

正如你所提到的mod_auth,IIRC你可以查詢一個Mysql數據庫。這樣做你甚至可以根據請求URI進行驗證。這可能是你的情況下的一個簡單的變種。

+0

感謝您的回覆。當我寫「會重定向到」時,我應該說「會重寫」,但我確信你的答案仍然適用。我正考慮通過在.htaccess中使用cookie來解決您提到的問題,正如本頁所述:http://www.willmaster.com/blog/contentprotection/htaccess-cookie.php –

+0

是的,但是Cookie有點像一個查詢參數(更好一點),所以不要指望超級安全。但Cookie用於HTTP會話管理,所以我會說它看起來不錯。 – hakre