2012-03-15 25 views
0

この質問は、Apacheとのより深い統合が必要であることを除いて、this oneと概念が似ています。PHP経由でApacheにREMOTE_USERを設定

私はPHPを使用してユーザーを認証し、セッションIDを持つCookieを設定しています。このセッションIDはデータベーステーブルで検索してユーザー名を検索できます。私はまた、AJP接続と他のアプリケーションサーバーへの通常のHTTP接続を介してその変数を渡すことができるように、ApacheでREMOTE_USER変数を設定する必要があります。これはcookieから情報を読み取るように設定できません。

これを正しく行うには、Apache(バージョン2)ともっと深く、おそらくモジュールを作成する必要があります。誰かが、これができるだけ少ない非PHPグルーコードでどのように達成されるかの例を持っていますか?私は確かに他のいくつかの言語に精通していますが、私の後にそれを維持しなければならない人にとって、このプロジェクトをできるだけシンプルに保つことを望んでいました。

ありがとうございました!

+0

アーキテクチャに関する詳細、リクエストがスタック全体にどのように流れていくのかなど、詳細を教えてください。 HTTP経由で情報を渡す必要がある場合は、GET/POSTパラメータやヘッダーだけを使用してください。 – galymzhan

答えて

0

PHPはApache変数へのPHPスクリプトアクセスを提供しません。環境変数を設定するにはfunctionがありますが、REMOTE_USERは設定されていないことが報告されています。

PHPハンドラを開始する前に、PHPハンドラがPHPの動作の前後にフェーズに他のハンドラを追加することで終了します。 Cでハンドラ関数を書くことができます。しかし、PHPプログラマがあなたの後にアクセスできる解決策があることを意味するので、私はPythonが非常に良い選択肢だと考えています。

mod_pythonではこれを非常に簡単に行うことができます。あなたがそのウェブサイトに行くと、その最後の更新が2008年2月であることがわかります。成熟し安定しています。現在のPython-Apacheの統合はmod_pythonの代わりにmod_wsgiで継続されているため、開発を続行しません。 mod_wsgiはWSGIに固執しているので、mod_pythonはApache固有の機能を提供しません。

mod_pythonをインストールした後で、必要なときに実行される単純な関数を書くだけで十分です。以下は、PHPの前後にある2つの関数を実行する例です。そのため、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 

この構成では、Pythonはそれをインポートすることができset_auth_user.pyを必要とします。 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 

私はこれがあなたの問題をあなたの必要とする方法で解決することを願っています。デモンストレーションのために2つのハンドラ関数を追加しました。それらのうちの1つだけが必要な場合は、Apacheの設定で行を削除して、すべての要求に対して無駄なメソッド呼び出しがないようにします。

関連する問題