#はじめに
adminerで「セッションの期限切れ。ログインし直してください」のエラーをたびたび出くわしたため、対処パターンをまとめました。
パスワードやホスト名、ユーザー名は、正しい前提です。
パターンと言っていますが、基本的に、webサーバーのnginxやapacheのエラーログを確認することが基本になります。
#対処パターン1
シークレットモードにして、「永久的にログイン」をチェックすると、ログインできることがあります。
#対処パターン2
セッション情報を保存するディレクトリの所有者が異なり、セッション情報を書き込めないパターンがあります。
webサーバーにnginxやapacheを使用している場合、エラーログを確認すると、以下のPermission denied
エラーログが出ている場合、その可能性が高いです。
Warning: Unknown: open(/var/lib/php/session/~~~~, O_RDWR)
failed: Permission denied (13) in Unknown on line 0
セッション情報の保存先は以下のコマンドで確認できます
$ php -i | grep session.save_path
session.save_path => "/var/lib/php/session"
以下のようにno value
の場合/etc/php.ini
ファイルを確認するとよいです。
$ php -i | grep session.save_path
session.save_path => no value => no value
$ cat /etc/php.ini
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
sessionディレクトリの所有者を確認し、nginxサーバーの場合、nginxが所有者になっているか確認し、所有者や所有者グループを変更しましょう。
また、chmodコマンドを使用して、権限付与が必要な場合もありますね。
$ cd /var/lib/php
$ ls -la session
drwxrwx--- 2 root apache 6 1月 30 12:21 session
所有権のグループがapacheになっているため、nginxに変えましょう。
$ chown -R root:nginx session
#対処パターン3
私が遭遇したレアケースだと思いますが、EC2のストレージの空き容量が0になったことが原因のときもあります。
エラーログを確認すると、空き容量がないよ、とありました。
$ cd /var/log/nginx/
cat error.log
error.log
FastCGI sent in stderr: "PHP message: PHP Warning: session_regenerate_id():
write failed: No space left on device (28)
空き容量を確認すると0にでした。
$df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
/dev/nvme0n1p1 30G 30G 20K 100% /
28GB分のファイルを削除して、再度、adminerにログインすると、エラー内容が変わりました。
php_network_getaddresses: getaddrinfo failed: Name or service not known
容量を再度確認すると、削除したファイルサイズ28GB分が反映されていないことが分かりました。
$df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
/dev/nvme0n1p1 30G 27G 2.9G 97% /
EC2を再起動すると、空き容量が95%を超え、adminerにログインすることができました。
#参考