rubyでcookieを使った原始的ななセッション管理CGI

基本編
(1)セッションID(デフォルト値)を送信するCGI
CGI Cookieを利用する.
(i)CookieはPATHが一致しないとブラウザが送信してくれないので、cookieの"path"の値に注意する.
デフォルトは発信したフォルダ.
(ii)cookieはHeaderで単純送信

#!/usr/local/bin/ruby
#coding: utf-8
require 'cgi'

cookie1=CGI::Cookie.new({"name" => "JSESSIONID" ,"value"=>"123456","path"=>"xxxx"})

filename="../../html/xxxxx/yyyy.html"
puts "Content-type: text/html"
puts "Set-Cookie: #{cookie1.to_s}"
puts ""
puts File.read(filename)

ユーザー名を返す
(1)クッキーから前回のセッションIDを取得
(2)前回のセッションIDからユーザー名をデータベースから取得(なければユーザー名を発行)
(3)新しいセッションIDを発行
(4)データベースを新しいセッションIDに更新する.
(5)新しいセッションIDをクッキーとして送信.
終了.
*データベース(renew.sqlite3)
user_session(user_id,session_id)

#!/usr/local/bin/ruby
#coding: utf-8
require 'cgi'
require 'sqlite3'

cgi=CGI.new()
def error_cgi
        print "Content-Type:text/html;charset=EUC\n\n"
        print "*** CGI Error List ***<br />"
        print "#{CGI.escapeHTML($!.inspect)}<br />"
        $@.each {|x| print CGI.escapeHTML(x), "<br />"}

end

begin


session_id=(cgi.cookies["JSESSIONID"][0]).to_s


if session_id.length == 0 then

        session_id="-1"
end


db=SQLite3::Database.new("renew.sqlite3")

new_session_id=Time.now.to_i.to_s
cookie1=CGI::Cookie.new({"name" => "JSESSIONID" ,"value"=>new_session_id,"path"=>"cgi-bin/xxxx"})


q=db.execute("select * from user_session where session_id=\"#{session_id}\";")
if q.length==0 then


        user_id=(db.execute("select user_id from user_session").map{|i| i[0].to_i}.max+1).to_s;
        db.execute("insert into user_session(user_id,session_id) values('#{user_id}','#{new_session_id}');")

else

        user_id=db.execute("select user_id from user_session where session_id='#{session_id}';")[0][0]
        db.execute("update user_session set user_id='#{user_id}',session_id='#{new_session_id}' where user_id='#{user_id}';")


end

user_id=db.execute("select user_id from user_session where session_id='#{new_session_id}';")[0][0]

puts "Content-type: text/html"
puts "Set-Cookie: #{cookie1.to_s}"
puts ""
puts "You are #{user_id}"
puts new_session_id
db.colse()
end

解析結果をtableに吐く.
idを特定して結果をtableにみにいき、table内容を表示する ajax