# class CGI::Session::PStore

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.

### Public Class Methods

new(session, option={}) click to toggle source

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 lib/cgi/session/pstore.rb, line 46
    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

### Public Instance Methods

close() click to toggle source

Update and close the session's `PStore` file.

    # File lib/cgi/session/pstore.rb, line 88
    def close
      update
    end

delete() click to toggle source

Close and delete the session's `PStore` file.

    # File lib/cgi/session/pstore.rb, line 93
    def delete
      path = @p.path
      File::unlink path
    end

restore() click to toggle source

Restore session state from the session's `PStore` file.

Returns the session state as a hash.

    # File lib/cgi/session/pstore.rb, line 71
    def restore
      unless @hash
        @p.transaction do
          @hash = @p['hash'] || {}
        end
      end
      @hash
    end

update() click to toggle source

Save session state to the session's `PStore` file.

    # File lib/cgi/session/pstore.rb, line 81
    def update
      @p.transaction do
        @p['hash'] = @hash
      end
    end