lighttpd で Ruby の PStore によるセッション情報の書き込みがリダイレクトで中断されるみたい

require "cgi"
require "cgi/session"
require 'cgi/session/pstore'

cgi = CGI.new
user_id = cgi['loginid']
session = CGI::Session.new(cgi, {
                    'database_manager' => CGI::Session::PStore,
                  })
session['userid'] = user_id
session.close

headers.store("status", "REDIRECT")
headers.store("Location", $rooturi + "portal.cgi")
puts cgi.header(headers)

exit 0

上記のような CGI を lighttpd で実行するとセッションのファイルは生成されるが、値が書き込まれずに終わる。コマンドラインで実行したり、Apache で実行しても問題はない。FastCGI対応してみたがそれでも変わらなかった。ちなみに database_manager が FileStore では問題は発生しない。

こんなコードを書いたのは、ログイン認証後にセッションへIDを保存してリダイレクトという流れの実現をしたかったのだが。。。いまいち原因が掴めない。