【问题标题】:Mod_rewrite to a session-control "handler.php"?Mod_rewrite 到会话控制“handler.php”?
【发布时间】:2012-09-23 21:08:32
【问题描述】:

我想将http://models.example.com/* 的所有请求重写为http://models.example.com/handler.php?requested_url=*

然后,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 的另一个问题是更改需要重置服务器。

我会很感激任何关于这个主题的意见!

【问题讨论】:

    标签: php apache session mod-rewrite mod-auth


    【解决方案1】:

    ... 将重定向到 ...

    重定向总是不安全的。它会将操作传递回客户端(浏览器),然后结束请求。

    这意味着,下一个请求是一个新请求,Apache 和您的 PHP 脚本都不知道该请求是否是新请求直到您将其添加到会话中

    但是,由于您希望您的 apache 网络服务器为资源提供服务,您需要在 apache 中验证会话。这意味着您需要扩展 apache,以便您可以检查一些环境变量或类似的重写条件。

    你可以想象,这有点复杂。

    正如您提到的 mod_auth,IIRC 您可以查询 Mysql 数据库。完成后,您甚至可以针对请求 URI 进行验证。在您的情况下,这可能是一个简单的变体。

    【讨论】:

    • 感谢您的回复。当我写“将重定向到”时,我应该说“将重写到”,但我很确定您的答案仍然适用。我正在考虑通过在 .htaccess 中使用 cookie 来解决您提到的问题,如本页所述:willmaster.com/blog/contentprotection/htaccess-cookie.php
    • 是的,但是 cookie 有点像查询参数(更好一点),所以不要期望它具有超级安全性。但是 cookie 用于 HTTP 会话管理,所以我认为它看起来不错。
    猜你喜欢
    • 2012-06-07
    • 2023-03-21
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多