class Egalite::SessionSequel

Public Class Methods

create_table(db, opts = {}) click to toggle source
# File lib/egalite/session.rb, line 39
def self.create_table(db, opts = {})
  table = opts[:table_name] || :sessions
  
  db.create_table(table) {
    primary_key :id, :integer, :auto_increment => true
    column :mac, :varchar
    column :updated_at, :timestamp
    column :expire_sec, :integer    # 任意項目: 個別に有効期限設定可能
  }
end
new(env, cookies, opts = {}) click to toggle source
Calls superclass method Egalite::Session::new
# File lib/egalite/session.rb, line 58
def initialize(env, cookies, opts = {}) 
  @db = env.db
  @table = opts[:tablename] || :sessions
  
  super(env, cookies, opts)
end

Public Instance Methods

_load(_sstr) click to toggle source
# File lib/egalite/session.rb, line 75
def _load(_sstr)
  return false unless _sstr and _sstr.size > 0
  (sid,mac) = _sstr.split(/_/)

  sid = sid.to_i
  return false if sid <= 0
  return false unless mac and mac.size > 0

  rec = @db[@table][:id => sid]
  return false unless rec and rec[:mac] == mac
  
  # timeout check
  updated = rec[:updated_at]
  return false if Time.now > expire(updated)
  
  @sstr = _sstr
  @hash = rec
  @sid = sid
  @mac = mac
  @loaded = true
  @cookies[@cookie_name] = cookie
  
  @db[@table].filter(:id => sid).update(:updated_at => Time.now)

  true
end
create(hash = nil) click to toggle source
# File lib/egalite/session.rb, line 109
def create(hash = nil)
  @sid = @db[@table].insert({})
  @mac = OpenSSL::Random.random_bytes(8).unpack('h*')[0]
  hash ||= {}
  @db[@table].filter(:id => @sid).update(hash.merge(:mac => @mac,:updated_at => Time.now))
  @hash = @db[@table][:id => @sid]

  @sstr = "#@sid" + "_#@mac"
  @cookies[@cookie_name] = cookie
  @loaded = true

  true
end
delete() click to toggle source
# File lib/egalite/session.rb, line 122
def delete
  @cookies[@cookie_name] = {
    :value => nil,
    :expires => Time.now - 3600,
    :path => @path,
    :secure => @secure
  }
  @db[@table].filter(:id => @sid).delete
  @loaded = false
  true
end
expire(t = nil) click to toggle source
# File lib/egalite/session.rb, line 49
def expire(t = nil)
  t ||= Time.now
  if @individual_expire and @hash and @hash[:expire_sec]
    t + @hash[:expire_sec]
  else
    t + @expire_after
  end
end
load() click to toggle source
# File lib/egalite/session.rb, line 104
def load
  _sstr = @cookies[@cookie_name]
  _sstr = _sstr[0] if _sstr.is_a?(Array)
  _load(_sstr)
end
load_from_param(_sstr) click to toggle source
# File lib/egalite/session.rb, line 101
def load_from_param(_sstr)
  _load(_sstr)
end
save() click to toggle source
# File lib/egalite/session.rb, line 133
def save
  return false unless @loaded
  [:updated_at, :mac, :id].each { |s| @hash.delete(s) }
  @db[@table].filter(:id => @sid).update(
    {:updated_at => Time.now}.merge(@hash)
  )
  true
end
sstr() click to toggle source
# File lib/egalite/session.rb, line 72
def sstr
  @sstr
end