*PHPのバージョンを上げたら認証ができなくなった [#gc0ca848]

PHPのバージョンを5.3.3から5.6に上げたところ、PukiWikiのBasic認証ができなくなった(ユーザー名とパスワードを入力しても無視され、繰り返し、無限にたずねてくる)という問題が発生しました。以下はその解決法の備忘録です。

**RewriteRuleでHTTP_AUTHORIZATIONを設定する [#rc0eca52]

「[[PHP: PHP による HTTP 認証 - Manual>http://php.net/manual/ja/features.http-auth.php]]」に投稿されているノートによると、CGI/FastCGI版のPHPの場合、HTTP_AUTHORIZATIONヘッダが自動で設定されないため、$_SERVER['PHP_AUTH_USER']や$_SERVER['PHP_AUTH_PW']、$_SERVER['HTTP_AUTHORIZATION']が設定されないということです(getallheaders関数でも取得できません)。

よって解決法としては、例えば次のような記述を.htaccessに書いて、HTTP_AUTHORIZATIONヘッダを設定します。

#code(pre){{
<IfModule mod_rewrite.c>
RewriteEngine   On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
}}

この方法で私の場合もうまく行きました。私の利用しているサーバーは、PHPを5.6にすると必ずFastCGIが有効になるようなので、それが原因でこのような問題が起こったのかもしれません。ただ、PHP5.3.3の時からCGI/FastCGI版ではありました。

**SetEnvIfで設定する [#d660d8d8]

同じように、SetEnvIfを使用する方法もあります。

#code(pre){{
<IfModule mod_setenvif.c>
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
}}

**セッションを使った認証に切り替える [#xbaac121]

「[[自作プラグイン/login.inc.php>https://pukiwiki.osdn.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3/login.inc.php]]」を使うと、Basic認証を使わずに、セッションを使って認証できるようになります。

//これより下は編集しないでください
#pageinfo([[:Category/PukiWiki]],2016-02-27 (土) 02:13:29,DOBON!,2016-02-27 (土) 02:13:29,DOBON!)

[ トップ ]   [ 編集 | 差分 | バックアップ | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]