phpMyAdminのログインループ

phpMyAdminのログイン画面でログインしようとすると、先に進まずにずっとログイン画面が表示されてしまう。
あ、いや、MySQLへのアクセスは、コマンドかMySQL Workbenchを使うので、普段はphpMyAdminを全く使わない(除くレン鯖)のだからいいのだけど、授業で使う関係で、新しいXAMPP(7.1.4)をインストールしたら問題が発覚した。
XAMPPインストール直後のMySQL(正確にはMariaDBだが)はrootパスワードが設定されていない。しかも、phpMyAdminにアクセスすると、無条件でrootでログインした状態の画面が表示される。これは全くもって問題なので、何はともあれ

  • rootのパスワードの設定
  • phpMyAdminでオートログインの解除、つまり、ログイン画面の表示

を設定するのが定石である。今回もこれを行った。そして、phpMyAdminのログイン画面でrootでログインしようとすると、何のメッセージもなくログイン画面が表示されたままになってしまう。試しに間違ったパスワードを入力すると、ちゃんとエラーメッセージが表示される。つまり、ログイン処理は正常に行われているのだが、その後の画面へ遷移しないのだ。あーだこーだと調査して原因がはっきりした。犯人はphp.iniの

session.auto_start=1

だった。ボクは、PHP開発ではsession.auto_startはOnで行っている。なので、まずこの設定を行うのだが、これが悪さしている。この設定を

session.auto_start=0

とすると、無事ログイン後の画面が表示されるのだ。XAMPPの5.6系列ではこんな問題はなかった。
さてさて、どうするか。この時に便利なのがローカル設定。ローカル設定は、

の3種の方法がある。通常は、.user.iniを選ぶところだが、これまたXAMPPでは.user.iniが効かないのだ。しかも、.htaccessもXAMPPのphpMyAdminの設定は

AllowOverride AuthConfig

となっていて、書き換えができない。そこで最後の方法を選択するしかない。XAMPPのphpMyAdminApache設定は、httpd-xampp.confファイルに書かれている。このファイルは、

  • Windows: C:\xampp\apache\conf\extra
  • Mac: /Applications/XAMPP/xamppfiles/etc/extra/

にある。Windowsの場合は、XAMPP Control PanelのApacheのConfigボタンをクリックしても編集できるようになっている。
このファイルのWindowsなら91行目、Macなら19行目当たりにある

<Directory "…phpMyAdmin">
  AllowOverride AuthConfig
  Require local
  ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

<Directory "…phpMyAdmin">
  php_flag session.auto_start Off  # ←
  AllowOverride AuthConfig
  Require local
  ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

のように書き換える。矢印の1行が増えている。これで、Apacheを再起動したら、無事phpMyAdminにログインできた。