CGI::Session::PStore
class CGI::Session::PStore
Parent:Object
基于PStore的会话存储类。
这建立在库文件pstore.rb提供的顶层PStore类上。会话数据被编组并存储在一个文件中。提供文件锁定和交易服务。
公共类方法
new(session, option={})显示源文件
Create a new CGI::Session::PStore instance
这个构造函数由CGI :: Session在内部使用。用户通常不需要直接调用它。
session
是正在为其创建实例的会话。会话ID只能包含字母数字字符; 自动生成的会话ID遵守这个要求。
option
是初始化程序的选项的散列。以下选项被认可:
tmpdir
用于存储PStore文件的目录。缺省为Dir.tmpdir(在Unix系统上通常为“/ tmp”)。
prefix
生成此会话的PStore文件的文件名时添加到会话ID的前缀。缺省为空字符串。
如果该会话的PStore文件不存在,则会创建该会话的PStore文件,如果它存在,则会打开该会话。
# File lib/cgi/session/pstore.rb, line 45
def initialize(session, option={})
dir = option['tmpdir'] || Dir::tmpdir
prefix = option['prefix'] || ''
id = session.session_id
require 'digest/md5'
md5 = Digest::MD5.hexdigest(id)[0,16]
path = dir+"/"+prefix+md5
path.untaint
if File::exist?(path)
@hash = nil
else
unless session.new_session
raise CGI::Session::NoSession, "uninitialized session"
end
@hash = {}
end
@p = ::PStore.new(path)
@p.transaction do |p|
File.chmod(0600, p.path)
end
end
公共实例方法
close() 显示源文件
更新并关闭会话的PStore文件。
# File lib/cgi/session/pstore.rb, line 87
def close
update
end
delete() 显示源文件
关闭并删除会话的PStore文件。
# File lib/cgi/session/pstore.rb, line 92
def delete
path = @p.path
File::unlink path
end
restore() 显示源文件
从会话的PStore文件恢复会话状态。
将会话状态作为散列返回。
# File lib/cgi/session/pstore.rb, line 70
def restore
unless @hash
@p.transaction do
@hash = @p['hash'] || {}
end
end
@hash
end
update() 显示源文件
将会话状态保存到会话的PStore文件。
# File lib/cgi/session/pstore.rb, line 80
def update
@p.transaction do
@p['hash'] = @hash
end
end