簡體   English   中英

通過PHP在Apache中設置REMOTE_USER

[英]Set REMOTE_USER in Apache via PHP

這個問題是在概念上類似於這一個 ,但我知道我需要與Apache更深度整合。

我正在通過PHP對用戶進行身份驗證,並設置具有會話ID的cookie,然后可以在數據庫表中查找該會話ID以查找用戶名。 我還需要在Apache中設置REMOTE_USER變量,以便可以通過AJP連接和常規HTTP連接將該變量傳遞給其他應用程序服務器,以使用無法設置為從Cookie讀取信息的服務器。

看來我需要與Apache(版本2)更深入地集成,甚至可能編寫一個模塊,以正確地做到這一點。 有沒有人舉例說明如何用盡可能少的非PHP粘合代碼來完成此工作? 雖然我當然熟悉其他幾種語言,但我希望對於那些必須在我之后進行維護的人來說,盡可能簡化該項目。

感謝您的指導!

PHP不提供PHP腳本訪問Apache變量的權限。 盡管有一個用於設置環境變量的函數 ,但是據報告它沒有設置REMOTE_USER。

通過在PHP工作之前和之后的階段中添加其他處理程序,您可以在PHP處理程序開始之前和結束之后執行所需的操作。 您可以使用C編寫處理程序函數; 但是由於您的意思是要擁有一個可供PHP程序員訪問的解決方案,因此我認為Python是一個很好的選擇。

mod_python允許您非常輕松地執行此操作。 如果訪問其網站,則可以看到它的最新更新是2008年2月。 但它是成熟且穩定的。 他們不會繼續開發,因為當前的Python-Apache集成在mod_wsgi而不是mod_python上繼續。 由於mod_wsgi堅持使用WSGI,因此它不像mod_python那樣提供特定於Apache的功能。

安裝mod_python之后,您所需要做的就是編寫簡單的函數,這些函數將在您需要時運行。 下面是在PHP之前和之后運行兩個函數的示例,因此您可以訪問PHP設置的cookie。

Apache配置:

# Enable mod_python:
LoadModule python_module modules/mod_python.so

# Enable it as a handler:
AddHandler mod_python .py
    # extension does not matter since we are not setting contentHandlers.
    # py files will continue being served as text/plain if you have any of them
    # under your document root.

# Handler that will run before PHP:
PythonFixupHandler set_auth_user

# Handler that will run after PHP:
PythonCleanupHandler set_auth_user

此配置需要set_auth_user.py,Python可以將其導入。 您可以將其放在Python安裝的site-packages文件夾中。

這是我們用Python編寫的Apache模塊:

# -*- coding: utf-8 -*-
from mod_python import apache

def fixuphandler(req):
    apache.log_error("starting :"+str(req.headers_out.get('Set-Cookie')))
    return apache.OK

def cleanuphandler(req):
    apache.log_error("cleaning up: "+str(req.headers_out.get('Set-Cookie')))
    req.user='hasanyasin' #this is how you update AUTH_USER
    return apache.OK

這是我們的PHP文件:

<?php
setcookie('abc','foobar');
?>

這是服務器發出請求后的Apache日志:

[Sun Jul 01 15:29:31 2012] [error] cleaning up: None
[Sun Jul 01 15:29:31 2012] [error] cleaning up: abc=foobar

我希望這能以您所需的方式解決您的問題。 我添加了兩個處理函數進行演示。 如果只需要其中一個,請在Apache配置中刪除該行,這樣就不會對每個請求都進行無用的方法調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM