adminで管理画面にログインしてるとちょっと操作してないだけでログアウトしてしまいます。セキュリティ的にそうした方がいいのかもしれませんが、あまりにも短いのでログアウトまでもうちょっと時間を伸ばすやり方。
admin/includes/keepalive_module.php
keepalive_module.phpファイル内で$timeoutAfterを探す。
if ((int)$timeoutAfter < 30) $timeoutAfter = 1440;
この$timeoutAfter = 1440 の数字を変えると自動ログアウトのダイアログが出てくるまでの時間を変更できます。デフォルトは1440秒、12時間出てこないようにするには43200秒に書き換えします。
すぐ下に// でコメントアウトされている$timeoutAfter = 15というのがあって、ここをコメントアウトを外すと15秒で自動ログアウトのダイアログが出てきて、ほんまにこの数字いじるだけで変わるんかい、と半信半疑な時に// を外して動作を確認してみることもできるようです。
管理画面での設定
続いて管理画面にログインして、一般設定→ショップ全般の設定→Admin session time Out in Seconds をクリックして数値を編集します。
デフォルトで900秒が設定されているので、12時間ログアウトしたくないなら43200に、24時間なら86400に設定します。
これだけではまだ設定は完了していません。zencartのセッションはphpコードを読んでいくと900秒(15分)以上に設定できないように書いてあります。
なのでsessions.phpを編集します。
includes/functions/sessions.php
$SESS_LIFE = (int)SESSION_TIMEOUT_ADMIN;
if ( PADSS_ADMIN_SESSION_TIMEOUT_ENFORCED != 0 && $SESS_LIFE > 900 ) {
$SESS_LIFE = 900;
}
この部分でphpのセッション保持時間を900秒より大きい数字を入れた場合、900秒が最大に戻されるように記述してあります。なので管理画面からいくら900秒より大きい数字を入れても無効になるようになっています。
$SESS_LIFE = 900;
この値を好きな数値に変更すると、ログアウトするまでの最大時間を変更できるようになります。
$SESS_LIFE =. 86400;
にすると最大86400秒自動ログアウトしない設定ができるようになります。
15分しかログインセッションがもたないとちょっと調べごとがあって他のページを見ていて戻ったらログアウトしていて、毎回またログインしなきゃ、と面倒だったことをなくすことができました。
phpのセッションを変えるのにphp.iniや、.htaccessを使わなくてもいいのか?と言いますとzencartのphpコードを読んでいくとsessions.php内でsession_start();の前にしっかり
@ini_set(‘session.gc_maxlifetime’, $SESS_LIFE);
とsessionの設定が記述してあり、共有レンタルサーバーでもログインセッションの変更が可能なようになっていました。
session.gc_maxlifetimeは、php.iniに記述してあるphpのログインセッション時間を取得する関数で、デフォルトでは1440秒に設定されています。これを$SESS_LIFEに読み込ませて先程の$SESS_LIFE = 900; にzencartが900秒をMAXに変更しているのです。短いですよね。
まとめ
zencartの管理画面ログアウト時間が短すぎる問題解決でした。
デフォルト15分は短すぎます。
それでいてこれを変更するのには、phpがある程度読めないと設定変更が難しく、けっこう手こずる部分ではないかと思いました。