PStore-based session storage class.
This builds upon the top-level PStore class provided by the library file pstore.rb. Session data is marshalled and stored in a file. File locking and transaction services are provided.
Create a new CGI::Session::PStore instance
This constructor is used internally by CGI::Session. The user does not generally need to call it directly.
session is the session for which this instance is being created. The session id must only contain alphanumeric characters; automatically generated session ids observe this requirement.
option is a hash of options for the initializer. The following options are recognised:
tmpdir |
the directory to use for storing the PStore file. Defaults to Dir::tmpdir (generally “/tmp” on Unix systems). |
prefix |
the prefix to add to the session id when generating the filename for this session’s PStore file. Defaults to the empty string. |
This session’s PStore file will be created if it does not exist, or opened if it does.
# File 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
Update and close the session’s PStore file.
# File cgi/session/pstore.rb, line 87
def close
update
end
Close and delete the session’s PStore file.
# File cgi/session/pstore.rb, line 92
def delete
path = @p.path
File::unlink path
end
Restore session state from the session’s PStore file.
Returns the session state as a hash.
# File cgi/session/pstore.rb, line 70
def restore
unless @hash
@p.transaction do
@hash = @p['hash'] || {}
end
end
@hash
end
Save session state to the session’s PStore file.
# File cgi/session/pstore.rb, line 80
def update
@p.transaction do
@p['hash'] = @hash
end
end