http://localhost/phpmyadmin/
というURLでXAMPPにデフォルトで入っているphpMyAdminを利用できます。
それはいいのですがアクセスすると
という謎エラーが。
ついでに
ってのも出てたので一緒にチェックしてみます。
まずDocumentRootにphpmyadminなんてディレクトリはありませんが、これは単純にxampp/apache/conf/extra/httpd-xampp.confでAliasが設定されています。
xampp/phpMyAdmin/あたりになっているはずですが、そこにphpMyAdminの本体が転がっています。
phpMyAdmin自体はMVC?何それ食い物?的な書かれ方をしてるので読むのは相当難儀です。
まず文言の定義はlang/japanese-utf-8.inc.phpです。
$strControluserFailed = '設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました';
で、次の$strControluserFailedはlibraries/dbi/mysqli.dbi.lib.phpです。
$GLOBALS…
PMA_DBI_connect()は都合二回呼ばれており、一回目の接続では失敗してtrigger_error()されています。
二回目の接続にはconfig.inc.phpで設定されている$cfg['Servers'][$i]['user']、$cfg['Servers'][$i]['password']が使用されています。
ではこの一回目の接続にはどのパラメータが使用されているかというと、同じファイルの$cfg['Servers'][$i]['controluser']、$cfg['Servers'][$i]['controlpass']です。
どゆこと?
名前からして$cfg['Servers'][$i]['user']には一般ユーザ、$cfg['Servers'][$i]['controluser']には管理者権限のユーザを割り当てるのかなとも思いますが、なんのためにこんな作りになっているのかはよくわかりませんでした。
$cfg['Servers'][$i]['controluser']をログインできる値にする、もしくは設定を削除することでエラーは発生しなくなります。
後者のエラーは、session.gc_maxlifetimeがcookieの有効期限より短いから意味がないぞ、というエラーです。
phpMyAdminは$cfg['LoginCookieValidity']でcookieの有効期限を設定します。
これが短すぎるとちょっと席を外しただけですぐログアウトされてしまい、不便になります。
で、それとは別にPHPではsession.gc_maxlifetimeでサーバ側セッションファイルの有効期限が設定されています。
この時間が過ぎたセッションファイルは廃棄処分されてしまいます。
結果として、session.gc_maxlifetime以上$cfg['LoginCookieValidity']以下の期間にアクセスされると、cookieは有効期限内だからブラウザはcookie値をちゃんと送ってくるのに、サーバ側のセッションファイルは削除されてしまっているので、セッションが継続できないよ、という状態になります。
実際のところは単にセッション期限切れになるだけなので特に問題はありません。
物凄い暇な人がcookieを解析して、有効期限が60分となっているのに50分後にアクセスしたらセッション期限切れになった!これはおかしい!とか言い出したりすることが万一あったりするかもしれないレベルの話です。
エラーが気持ち悪いならconfig.inc.phpの隅っこに
ini_set("session.gc_maxlifetime", $cfg['LoginCookieValidity']);
とか書いておけばいいです。
というURLでXAMPPにデフォルトで入っているphpMyAdminを利用できます。
それはいいのですがアクセスすると
設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました
という謎エラーが。
ついでに
Your PHP parameter session.gc_maxlifetime is lower that cookie validity configured in phpMyAdmin, because of this, your login will expire sooner than configured in phpMyAdmin.
ってのも出てたので一緒にチェックしてみます。
まずDocumentRootにphpmyadminなんてディレクトリはありませんが、これは単純にxampp/apache/conf/extra/httpd-xampp.confでAliasが設定されています。
xampp/phpMyAdmin/あたりになっているはずですが、そこにphpMyAdminの本体が転がっています。
phpMyAdmin自体はMVC?何それ食い物?的な書かれ方をしてるので読むのは相当難儀です。
まず文言の定義はlang/japanese-utf-8.inc.phpです。
$strControluserFailed = '設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました';
で、次の$strControluserFailedはlibraries/dbi/mysqli.dbi.lib.phpです。
$GLOBALS…
PMA_DBI_connect()は都合二回呼ばれており、一回目の接続では失敗してtrigger_error()されています。
二回目の接続にはconfig.inc.phpで設定されている$cfg['Servers'][$i]['user']、$cfg['Servers'][$i]['password']が使用されています。
ではこの一回目の接続にはどのパラメータが使用されているかというと、同じファイルの$cfg['Servers'][$i]['controluser']、$cfg['Servers'][$i]['controlpass']です。
どゆこと?
名前からして$cfg['Servers'][$i]['user']には一般ユーザ、$cfg['Servers'][$i]['controluser']には管理者権限のユーザを割り当てるのかなとも思いますが、なんのためにこんな作りになっているのかはよくわかりませんでした。
$cfg['Servers'][$i]['controluser']をログインできる値にする、もしくは設定を削除することでエラーは発生しなくなります。
後者のエラーは、session.gc_maxlifetimeがcookieの有効期限より短いから意味がないぞ、というエラーです。
phpMyAdminは$cfg['LoginCookieValidity']でcookieの有効期限を設定します。
これが短すぎるとちょっと席を外しただけですぐログアウトされてしまい、不便になります。
で、それとは別にPHPではsession.gc_maxlifetimeでサーバ側セッションファイルの有効期限が設定されています。
この時間が過ぎたセッションファイルは廃棄処分されてしまいます。
結果として、session.gc_maxlifetime以上$cfg['LoginCookieValidity']以下の期間にアクセスされると、cookieは有効期限内だからブラウザはcookie値をちゃんと送ってくるのに、サーバ側のセッションファイルは削除されてしまっているので、セッションが継続できないよ、という状態になります。
実際のところは単にセッション期限切れになるだけなので特に問題はありません。
物凄い暇な人がcookieを解析して、有効期限が60分となっているのに50分後にアクセスしたらセッション期限切れになった!これはおかしい!とか言い出したりすることが万一あったりするかもしれないレベルの話です。
エラーが気持ち悪いならconfig.inc.phpの隅っこに
ini_set("session.gc_maxlifetime", $cfg['LoginCookieValidity']);
とか書いておけばいいです。
PR
トラックバック
トラックバックURL: