Ruby-CGIセッション
セッション管理
Ruby CGIでは、複数のCGIスクリプトで一つのセッションを実現することができます。
セッション管理の動作
セッションに関する情報はサーバ側で管理し、クライアントはセッションを表すユニークなIDを渡します。
次回アクセス時に、クライアントからIDを受け取ることで、サーバに保持しておいたデータの中からセッションに関する情報を拾い出します。
セッションの作成
cgi/sessionライブラリではCGI::Sessionオブジェク トを利用してセッション管理を行います。
cgi/sessionではセッション情報を保存するファイルのパーミッションがumaskの値に依存します。
umaskが022ならファイルのパーミッションは644になるので任意のユーザがファイルを読むことができてしまいます。
FIle.umask(0066)といったメソッドを実行する必要があります。
セッションに情報を記録する
require 'cgi'
require 'cgi/session'
cgi = CGI.new
session = CGI::Session.new(cgi)
#セッション情報を記録する
session['name'] = "value"
別CGIでこのセッション情報を取り出す
cgi = CGI.new
session = CGI::Session.new(cgi)
name = session['name']
セッションによるログイン判断の実装
ログイン処理
def login_process()
login_id = @cgi["login_id"]
login_pw = @cgi["login_pw"]
# セッションが確立済み
if( @session != nil )
return
end
# 新規セッションの作成
@session = CGI::Session.new( @cgi, {"new_session"=>true,
"tmpdir"=>"tmp/." } )
@session['account'] = 1
@session['id'] = login_id
@session.close
end
ログイン済みか判断する
#!
# @brief 既存セッションの取得
# @param[in] cgi CGIオブジェクト
# @return session SESSIONオブジェクト
#
def get_existing_session( cgi )
begin
session = CGI::Session.new( cgi, {"new_session"=>false,
"tmpdir"=>"tmp/." } )
rescue ArgumentError
session = nil
end
return( session )
end
ログアウト処理
def logout_process()
return if( is_session_auth() == false )
# セッションの終了
@session['account'] = 0
@session.close
@session.delete
# ログアウト完了画面
login = STW::Login.new( PATH_PASSWD )
@contents = login.prompt( LOGIN_TEMPLETE )
put_browser_info()
end
#!
# @brief セッション系の権限確認
# @return true/false
#
def is_session_auth()
# 編集権限の確認
if( @session == nil )
@contents << "<h1>ERROR</h1>"
@contents << "<p>Invalid Session.</p>"
@contents << "<p>Session is not enable.</p>"
return( false )
end
return( true )
end
関連ページ
- Ruby
- Ruby-ファイルロック
- Ruby-OpenSSL暗号化
- Ruby-zlibファイル圧縮
- Ruby-ハッシュを作成する
- Ruby-ログのローテーション
- Ruby-YAML形式ファイルを操作する
- Ruby-WEBrickでwebサーバ
- Ruby-CGIでパラメータを受け取る
- Ruby-CGIセッション