lib/rsence/sessionstorage.rb in rsence-pre-2.2.0.38 vs lib/rsence/sessionstorage.rb in rsence-pre-2.2.2.0

- old
+ new

@@ -216,12 +216,16 @@ ses_data = Marshal.load( ses_data_dump ) ses_key = ses_data[:ses_key] @sessions[ses_id] = ses_data @session_keys[ ses_key ] = ses_id @session_cookie_keys[ ses_data[:cookie_key] ] = ses_id + if @plugins + @plugins.delegate( :load_ses_id, ses_id ) + @plugins.delegate( :load_ses, ses_data ) + end rescue => e - warn "Unable to restore session id: #{ses_id}, error: #{e.inspect}" + warn "Unable to load session: #{ses_id}, because: #{e.message}" @db[:rsence_session].filter(:id => ses_id).delete @db[:rsence_uploads].filter(:ses_id => ses_id).delete end end end @@ -234,23 +238,30 @@ puts "Warning: Can't store sessions: No database!" if RSence.args[:verbose] return end puts "Storing sessions..." if RSence.args[:verbose] db_open - @sessions.each_key do |ses_id| - ses_data = @sessions[ ses_id ] - ses_data_dump = Marshal.dump( ses_data ) - @db[:rsence_session].filter( - :id => ses_id - ).update( - :cookie_key => ses_data[:cookie_key], - :ses_key => ses_data[:ses_key], - :user_id => ses_data[:user_id], - :ses_data => ses_data_dump.to_sequel_blob, - :ses_timeout => ses_data[:timeout], - :ses_stored => Time.now.to_i - ) + @sessions.each do |ses_id,ses_data| + if @plugins + @plugins.delegate( :dump_ses, ses_data ) + @plugins.delegate( :dump_ses_id, ses_id ) + end + begin + ses_data_dump = Marshal.dump( ses_data ) + @db[:rsence_session].filter( + :id => ses_id + ).update( + :cookie_key => ses_data[:cookie_key], + :ses_key => ses_data[:ses_key], + :user_id => ses_data[:user_id], + :ses_data => ses_data_dump.to_sequel_blob, + :ses_timeout => ses_data[:timeout], + :ses_stored => Time.now.to_i + ) + rescue => e + warn "Unable to dump session: #{ses_id}, because: #{e.message}" + end end db_close end ## Shut-down signal, triggers store_sessions for now @@ -294,10 +305,13 @@ # Deletes the session data itself @sessions.delete( ses_id ) # Removes all ticket-based storage bound to the session - @plugins[:ticket].expire_ses_id( ses_id ) if @plugins + if @plugins + @plugins.delegate( :expire_ses, ses_data ) + @plugins.delegate( :expire_ses_id, ses_id ) + end # target -> source cleanup if @clone_sources.has_key?( ses_id ) source_id = @clone_sources[ ses_id ] @clone_sources.delete( ses_id ) if @clone_sources.has_key?( ses_id )