English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby CGI 세션

CGI::Session은 사용자와 CGI 환경에서 지속적인 세션 상태를 저장할 수 있습니다. 세션이 사용된 후에는 닫아야 하며, 이렇게 하면 데이터가 저장된 저장소에 쓰일 수 있으며, 세션이 완료되면 데이터를 제거해야 합니다.

온라인 예제

#!/usr/bin/ruby
 
require 'cgi'
require 'cgi/session'
cgi = CGI.new("html4")
 
sess = CGI::Session.new(cgi, "session_key" => "a_test",
                              "prefix" => "rubysess.")
lastaccess = sess["lastaccess"].to_s
sess["lastaccess"] = Time.now
if cgi['bgcolor'][0] =~ /[a-z]/
  sess["bgcolor"] = cgi['bgcolor']
end
 
cgi.out{
  cgi.html {
    cgi.body ("bgcolor" => sess["bgcolor"]){
      "The background of this page"    +
      "changes based on the 'bgcolor'" +
      "each user has in session."      +
      "Last access time: #{lastaccess}"
    }
  }
}

접근 "/cgi-bin/test.cgi?bgcolor=red"은 지정된 배경색의 페이지로 이동합니다.

세션 데이터는 서버의 임시 파일 디렉토리에 존재하며, prefix 매개변수는 세션의 프리픽스를 지정하여 임시 파일의 프리픽스로 사용됩니다. 이렇게 하면 서버에서 다른 세션 임시 파일을 쉽게 인식할 수 있습니다.

CGI::Session 클래스

CGI::Session은 사용자와 CGI 환경의 지속적인 상태를 유지합니다. 세션이 메모리에 있을 수도 있고 하드디스크에 있을 수 있습니다.

클래스 메서드

Ruby 클래스 Class CGI::Session은 세션을 생성하는 간단한 메서드를 제공합니다:

CGI::Session::new( cgi[, option])

새로운 CGI 세션을 활성화하고相应的 CGI::Session 객체를 반환합니다. 선택 사항인 해시 옵션은 다음 값 중 하나일 수 있습니다:

  • session_key: 세션을 저장하는 키 이름. 기본적으로 _session_id입니다.

  • session_id:  유일한 세션 ID. 자동 생성됩니다.

  • new_session: true라면 현재 세션에 새로운 Session id를 생성합니다. false라면 session_id를 통해 존재하는 세션을 사용합니다. 이 매개변수를 생략하면, 사용 가능하다면 기존의 세션을 사용하며, 사용할 수 없다면 새로운 세션을 생성합니다.

  • database_manager: sessions를 저장하는 클래스로, CGI::Session::FileStore 또는 CGI::Session::MemoryStore가 될 수 있습니다. 기본적으로 FileStore입니다.

  • tmpdir:  FileStore에 대해서는 세션의 오류 저장 디렉토리로 사용됩니다.

  • prefix: FileStore에 대해서는 세션 파일의 접두사로 사용됩니다.

메서드 예제화

순번메서드 설명
1[ ]
주어진 키의 값을 반환합니다. 예제를 참조하세요.
2[ ]=
주어진 키의 값을 설정합니다. 예제를 참조하세요.
3delete
기본 데이터베이스 관리의 삭제 메서드를 호출합니다. FileStore에 대해서는 세션을 포함한 물리 파일을 삭제하고, MemoryStore에 대해서는 메모리에서 세션 데이터를 제거합니다.
4update
기본 데이터베이스 관리의 업데이트 메서드를 호출합니다. FileStore에 대해서는 세션을 디스크에 쓰고, MemoryStore에 대해서는 효과가 없습니다.