/usr/share/pcsd/session.rb is in pcs 0.9.149-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | require 'rack/session/pool'
class SessionPoolLifetime < Rack::Session::Pool
def initialize(app, options={})
super
@pool_timestamp = Hash.new()
end
def call(env)
# save session storage to env so we can get it later
env[:__session_storage] = self
super
end
def get_session(env, sid)
with_lock(env) do
now = Time.now()
# delete the session if expired
if @default_options[:expire_after] and sid and @pool_timestamp[sid] and
@pool_timestamp[sid] < (now - @default_options[:expire_after])
then
delete_session(sid)
end
# create new session if nonexistent
unless sid and session = @pool[sid]
sid, session = generate_sid, {}
@pool.store sid, session
end
# bump session's access time
@pool_timestamp[sid] = now
[sid, session]
end
end
def set_session(env, session_id, new_session, options)
with_lock(env) do
@pool.store session_id, new_session
# bump session's access time
@pool_timestamp[session_id] = Time.now()
session_id
end
end
def destroy_session(env, session_id, options)
with_lock(env) do
delete_session(session_id)
generate_sid unless options[:drop]
end
end
def drop_expired(env)
return unless lifetime = @default_options[:expire_after]
with_lock(env) {
threshold = Time.now() - lifetime
@pool_timestamp.select { |sid, timestamp|
timestamp < threshold
}.keys.each { |sid|
delete_session(sid)
}
}
end
private
def delete_session(sid)
@pool.delete(sid)
@pool_timestamp.delete(sid)
end
end
|