Ruby - CGI 会话

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"会为单个用户在每次连续点击时将页面变为红色,直到通过 URL 指定新的"bgcolor"。

会话数据存储在每个会话的临时文件中,prefix 参数分配一个要附加到文件名的字符串,使您的会话易于在服务器的文件系统上识别。

CGI::Session 仍然缺乏许多功能,例如存储字符串以外的对象的能力,跨多个服务器的会话存储。


类 CGI::Session

CGI::Session 为 CGI 环境中的 Web 用户维护一个持久状态。 会话可以驻留在内存中,也可以存储在磁盘上。


类方法

Ruby 类 Class CGI::Session 提供了一个单一的类方法来创建会话 −

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

启动一个新的 CGI 会话并返回相应的 CGI::Session 对象。 option 可以是选项哈希,指定以下一项或多项 −

  • session_key − 保存会话 ID 的键名。 默认为 _session_id。

  • session_id − 唯一的会话 ID。 自动生成

  • new_session − 如果为真,则为此会话创建一个新的会话 ID。 如果为 false,则使用 session_id 标识的现有会话。 如果省略,则使用现有会话(如果可用),否则创建一个新会话。

  • database_manager − 用于保存会话的类; 可能是 CGI::Session::FileStore 或 CGI::Session::MemoryStore。 默认为文件存储。

  • tmpdir − 对于 FileStore,会话文件的目录。

  • prefix − 对于 FileStore,会话文件名的前缀。


实例方法

序号 方法 & 描述
1

[ ]

返回给定键的值。 请参见上面的示例。

2

[ ]=

设置给定键的值。 请参见上面的示例。

3

delete

调用底层数据库管理器的删除方法。 对于 FileStore,删除包含会话的物理文件。 对于 MemoryStore,从内存中删除会话。

4

update

调用底层数据库管理器的更新方法。 对于 FileStore,将会话数据写入磁盘。 对 MemoryStore 无效。

❮ Ruby Web 应用程序 - CGI 编程