Ruby CGI Sessions

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 供给了简略的办法来创立 session:

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

启用一个新的 CGI 会话并回来相应的 CGI::Session 目标。选项能够是可选的哈希,能够是以下值:

  • session_key: 键名保存会话 默以为 _session_id。
  • session_id: 仅有的会话 ID。主动生成
  • new_session: 假如为true,为当时会话创立一个新的Session id。 假如为 false, 经过 session_id 运用已存在的 session 标识。 假如省掉该参数,假如可用则运用现有的会话,不然创立一个新的。
  • database_manager: 用于保存 sessions 的类,能够是 CGI::Session::FileStore or CGI::Session::MemoryStore。默以为 FileStore。
  • tmpdir: 关于 FileStore, 为 session 的错存储目录。
  • prefix: 关于 FileStore, 为 session 文件的前缀。

实例化办法

序号办法描绘
1[ ]
回来给定 key 的值。检查实例。
2[ ]=
设置给定 key 的值。 检查实例。
3delete
调用底层数据库办理的删去办法。关于 FileStore, 删去包括 session 的物理文件。 关于 MemoryStore, 从内存中移除 session 数据。
4update
调用底层数据库办理的更新办法。 关于 FileStore, 将 session 写入到磁盘中。 关于 MemoryStore则无作用。