読者です 読者をやめる 読者になる 読者になる

Ruby CGI::Session で Cookie が発行されない

Ruby

ログイン CGI でクッキーがクライアントに返らないので調べたら・・・

#!/usr/bin/env ruby18

require 'cgi/session'

…(省略)…

def create_session(cgi, timeout)
  begin
    # 既存のセッションは削除
    session = CGI::Session.new(cgi, { 
                    'new_session' => false })
    session.delete
  rescue ArgumentError
  end

  return CGI::Session.new(cgi, {
                'new_session' => true,
                'session_expires' => timeout })
  end
end

session = create_session(cgi, Time.now + 3600)

session['savadata'] = "hogehoge"

print "Content-Type:text/html\r\n\r\n"
print <<EOF
<html>
<body>
<p>login success.</p>
</body>
</html>
EOF

exit 0

としたらクッキーができない。
ヘッダの出力がないことに気づいた。

puts cgi.header({ 'Content-Type' => 'text/html'})
print <<EOF
<html>
<body>
<p>login success.</p>
</body>
</html>
EOF

として cgi.header を puts しなければいけなかった。