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

関連ページ