位置:首頁 > 腳本語言 > Ruby教學 > Ruby CGI Session

Ruby CGI Session

CGI::Session 維護用戶在CGI環境持久化狀態Web中。會話應在使用後關閉,因為這可以確保他們的數據被寫入。當已經永久與會話完成應該將其刪除。

#!/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" 將翻到下一頁 red 為單個用戶為每個連續命中,直到一個新的 "bgcolor" 能過URL指定。

會話數據存儲在一個臨時文件,為每個會話 prefix參數指定一個字符串附加到文件名前麵,讓會話易於識彆在服務器上的文件係統。

CGI::Session 仍然缺少很多功能,如能力來存儲對象之外字符串,跨多個服務器會話存儲等。

CGI::Session 類:

A CGI::Session Web用戶保持一個持久的狀態,在CGI環境。會話可能在內存中或者存儲在磁盤上。

類方法:

Ruby 類 Class CGI::Session 提供了一個單一的類的方法創建一個會話:

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

啟動一個新的CGI會話並返回相應的 CGI::Session 對象。選項是一個可選項哈希值,指定一個或多個下列:

  • session_key: 索引鍵名稱會話ID。默認是_session_id。 is _session_id.

  • session_id: Unique session ID. Generated automatically

  • new_session: If true, create a new session id for this session. If false, use an existing session identified by session_id. If omitted, use an existing session if available, otherwise create a new one.

  • database_manager: Class to use to save sessions; may be CGI::Session::FileStore or CGI::Session::MemoryStore. Default is FileStore.

  • tmpdir: For FileStore, directory for session files.

  • prefix: For FileStore, prefix of session filenames.

實例方法:

SN 方法說明
1 [ ]
Returns the value for the given key. See example above.
2 [ ]=
Sets the value for the given key. See example above.
3 delete
Calls the delete method of the underlying database manager. For FileStore, deletes the physical file containing the session. For MemoryStore, removes the session from memory.
4 update
Calls the update method of the underlying database manager. For FileStore, writes the session data out to disk. Has no effect with MemoryStore.