class Tina4::SessionHandlers::FileHandler
def cleanup
def cleanup return unless Dir.exist?(@dir) Dir.glob(File.join(@dir, "sess_*")).each do |file| File.delete(file) if File.mtime(file) + @ttl < Time.now end end
def destroy(session_id)
def destroy(session_id) path = session_path(session_id) File.delete(path) if File.exist?(path) end
def gc(max_age)
-
max_age(Integer) -- maximum session age in seconds
def gc(max_age) return unless Dir.exist?(@dir) now = Time.now Dir.glob(File.join(@dir, "sess_*")).each do |file| File.delete(file) if File.mtime(file) + max_age < now rescue StandardError # Corrupt or locked file — skip end end
def initialize(options = {})
def initialize(options = {}) @dir = options[:dir] || File.join(Dir.pwd, "sessions") @ttl = options[:ttl] || 86400 FileUtils.mkdir_p(@dir) end
def read(session_id)
def read(session_id) path = session_path(session_id) return nil unless File.exist?(path) # Check expiry if File.mtime(path) + @ttl < Time.now File.delete(path) return nil end data = File.read(path) JSON.parse(data) rescue JSON::ParserError nil end
def session_path(session_id)
def session_path(session_id) safe_id = session_id.gsub(/[^a-zA-Z0-9_-]/, "") File.join(@dir, "sess_#{safe_id}.json") end
def write(session_id, data)
def write(session_id, data) path = session_path(session_id) File.write(path, JSON.generate(data)) end