2

我的 apache 服务器上有一个目录的 .htaccess 文件。目前这使用 mod_auth_mysql 进行用户验证以查看目录列表。但是,如果用户已经登录到我的应用程序(因此存在 cookie),我想跳过有效用户要求,从而消除多次登录。

当前的 .htaccess

AuthName "Please don't hack the server, cheers"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthType Basic
Auth_MYSQL on
Auth_MySQL_Host localhost
Auth_MySQL_User username
Auth_MySQL_Password password
AuthMySQL_DB auth
AuthMySQL_Password_Table users
Auth_MySQL_Username_Field username
Auth_MySQL_Password_Field password
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext
Auth_MySQL_Authoritative On
require user james

饼干检查

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^cookiename=ok$
RewriteRule .* / [NC,L]

如何正确组合这两者,首先检查 cookie 并在找到时允许通过,然后在未找到 cookie 时检查有效用户?

谢谢

4

1 回答 1

3

您需要在这里做 2 件事,您可以使用该SetEnvIf指令创建一个环境变量并对照Cookie. 然后您需要告诉 mod_auth_mysql 允许任何一组要求满足身份验证。

首先是环境变量:

SetEnvIf Cookie cookiename=ok norequire_auth=yes

这是一个与Cookie: HTTP 标头cookiename=ok匹配的正则表达式。然后:Satisfy

Order Deny,Allow
Satisfy Any

# your auth stuff:
AuthName "Please don't hack the server, cheers"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthType Basic
Auth_MYSQL on
Auth_MySQL_Host localhost
Auth_MySQL_User username
Auth_MySQL_Password password
AuthMySQL_DB auth
AuthMySQL_Password_Table users
Auth_MySQL_Username_Field username
Auth_MySQL_Password_Field password
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext
Auth_MySQL_Authoritative On
require user james

Allow from env=norequire_auth

所以Satisfy Any我们允许的手段如果满足require user james满足Allow from env=norequire_auth。如果没有满足,则需要满足两条线才能允许访问。

请注意,cookie 很容易被伪造,并且此系统不是保护您的页面的好方法。您至少需要检查 cookie 的值以获取会话 ID 或其他内容。

于 2012-11-04T17:06:13.593 回答