ソースを追いかけたところ、確率の問題でもないことが分かりましたので訂正します。
Quote:
クライアント側(クッキー)の有効期限は、下の方でsetcookie()されてるはずですよ。
gc_maxlifetimeはサーバ側の有効期限設定なので、意味も全く違います。
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の設定値に従って設定されます。
ですので、カスタムセッションを使う場合は、common.phpの189行目で
@ini_set('session.cookie_lifetime', $xoopsConfig['session_expire'] * 60);
を呼ぶ必要があると思います。
gc_maxlifetimeの設定もそういう意図で行われているのかと思いましたが、真相は分かりません。