セッションの使い方

セッション変数書き込み


require "cgi"
require "cgi/session"
 
ses = CGI.new
session = CGI::Session::new(ses)
 
#セッション変数に値を代入
session['user_id'] = "kazan"
print input.header("type" => "text/html","charset" => "euc-jp")
 

Rubyの場合、セッションを書き込む際に、ヘッダを出力するので、そのまま Location でリダイレクトさせると、値を保持してくれない。リダイレクトさせる場合は以下のようにする


#==============だめな例====================

require "cgi"
require "cgi/session"
 
ses = CGI.new
session = CGI::Session::new(ses)
 
session['user_id'] = "kazan"
print input.header("type" => "text/html","charset" => "euc-jp")
 
print "Status: ", (ENV['SERVER_PROTOCOL'] == "HTTP/1.1" ? "303" : "302"), "\n"
print "Location: index.html\n\n"
 
 
#==============よい例====================

require "cgi"
require "cgi/session"
 
ses = CGI.new
session = CGI::Session::new(ses)
 
session['user_id'] = "kazan"
print input.header("type" => "text/html","charset" => "euc-jp")
print <<EOF
 
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=Shift_JIS">
<META HTTP-EQUIV="Refresh" content="0;URL=index.html">
<TITLE>Session</TITLE>
</HEAD>
<BODY>
 リダイレクト
</BODY>
</HTML>
EOF
 


セッション変数読み込み
 


require "cgi"
require "cgi/session"
 
ses = CGI.new
session = CGI::Session::new(ses)
 
#セッション変数に値を代入
user_id = session['user_id']