如何使用 PHP 会话保护 Apache 中的目录

Cog*_*gsy 9 php authentication apache-2.2

我有一个使用 PHP 会话进行身份验证的站点。有一个我想限制访问的目录,它不使用任何 PHP,它只是充满了静态内容。

我只是不知道如何在没有每个请求都通过 PHP 脚本的情况下限制访问。有什么方法可以让 Apache 检查会话凭据并限制访问,如基本身份验证?

Aqu*_*ion 6

除非您更改了设置,否则 PHP 会话数据以其自己的 serialize() 格式的变体存储在临时目录中,并且不使用 PHP 本身就不容易获得该数据。

不幸的是,您似乎希望在动态授权每个请求的同时获得静态服务文件的速度,这并不是真正兼容的目标。您可以通过拥有一个超轻 PHP 脚本来进行妥协,然后您使用 mod_rewrite 将对其中的文件的请求重写为,尽管事情很好。超级简单的例子:

.htaccess:

 RewriteEngine On
 RewriteMap auth prg:auth.php
 RewriteRule (.*) ${auth:$1}
Run Code Online (Sandbox Code Playgroud)

auth.php:

#!/usr/bin/php
 <?PHP
 set_time_limit(0); # This program needs to run forever. 
 $stdin = fopen("php://stdin","r"); # Keeps reading from standard in
 while (true) {
        $line = trim(fgets($stdin));
        if (isset($_SESSION['USER_LOGGED_IN'])) {
                echo $line\n";
        } else {
                echo "authfailed.html\n";
        }
 }
Run Code Online (Sandbox Code Playgroud)

值得注意的是,该 PHP 脚本将永远运行,因此我认为如果您更改它,则需要重新启动 apache。

这一切都未经测试,但这大致是我认为您必须进入的方向。

参考:


小智 0

如果您使用 mod_php,则选择基本身份验证。http://php.net/manual/en/features.http-auth.php