monsukeさん、こんにちは。
Quote:
common.phpの192行目でsession_start()した際に、sessionテーブルからsession_idが一致するセッションデータを取得しますが、このsession_idは$xoopsConfig['session_expire']の設定が反映されていません。
(183行目でクッキーのsession_nameをsession_idに設定しようとしていますが、このクッキーはcommon.phpの201行目で$xoopsConfig['session_expire']の設定が反映されているため、すでに取得できません)
そしてここでのsession_idは、php.iniのsession.cookie_lifetimeの設定値に従って設定されます。
ああ、なるほど。
先に、PHPSESSIDでセッションIDが送られてきてますね。
(そっちでもSet-Cookieされているのを見落としてました)
確かにこれじゃ、ブラウザを閉じるまで、有効期限の設定も何も効かないでしょう。
ただ、ブラウザを閉じた後については、そのちゃんとその設定は効いていると思いますよ。
それと、繰り返しになりますが、クッキーの生存時間と、サーバ側セッション情報の保持時間はまったく独立した事象ですので、gc_maxlifetimeの代わりにcookie_lifetimeをセットすべき、というのは違うでしょう。
それこそ、第3者へクッキーが漏洩した時に、セッションハイジャックを防御する可能性があるのは、gc_maxlifetimeのみであり、cookie_lifetimeなんて何の意味も持ちません。
そこを改善するなら、セッションハンドラで頻度設定を無視して、セッション開始前に期限切れのレコードを常に全部消しちゃう、くらいですかね。