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を保存してリダイレクトという流れの実現をしたかったのだが。。。いまいち原因が掴めない。