Hello-- On Aug 3, 2009, at 5:55 PM, Phoenix Rising wrote:
> >> What is your motivation for removing these rows at all? Generally, >> large >> database tables that are properly indexed shouldn't pose much of a >> performance concern. > > The reasoning behind this is that I want old sessions that are > inactive for 10 minutes to be terminated automagically. It's a > "security" concern (notice the quotes - intentional :) ). This is a > workplace-only application for our employees to use. Theoretically, > there's no reason that a user's session, that has been idle for 10+ > minutes, should have access without logging in again. This will be > seen by customers in our retail stores, and I don't necessarily want > all this data just "available" in the event one of our sales > associates walks away from a computer, and a customer starts poking > around for no good reason. Obviously that's not "great" security, but > it's "Good Enough(TM)". > > Company-wide we only have roughly ~350 employees, so the size of the > DB has never been a major concern for me. I was more curious about > the implications of, as Hassan pointed out, loading the Rails > environment every 10 minutes. I was actually thinking more along the > lines of memory leaks (even a very small one could snowball very fast > on a 10-minute cron job), but Hassan's point is more...to the point. > >> This is something I've been looking into (but not implemented) and >> the problem with this approach seems to be the startup overhead of >> loading your Rails environment over and over. > >> So you might want to look at the various daemon options, i.e. just >> run something continuously to periodically expunge old sessions. > > Thanks. This is exactly the kind of stuff I was worried about, and I > appreciate you bringing up a point I was probably just too tired to > see :) Do you have any thoughts/ideas on a daemonized version that I > could run as a rake task? I've never written a real daemon before - > in any language - so I'm not sure even where to start. Are there any > gems that would be useful in the process? > >> Well, what you are both looking at doing is: >> >> Session.delete_all, :conditions => ['updated_at < ?', 10.minutes.ago] >> >> >> That translates into a pretty quick database query, depending on the >> number of sessions you anticipate having. WDYT? > > Yep, that's essentially what my rake task does right now. It's just > that the cost of loading the Rails environment once every 10 minutes > (as a cron job would do) would be a bit too costly, as Hassan points > out. A daemonized version of that is probably the way to go. > > Thank you all for your help :) > > > > On Aug 3, 6:17 pm, "s.ross" <[email protected]> wrote: >> On Aug 3, 2009, at 4:53 PM, Hassan Schroeder wrote: >> >> >> >> >> >> >> >>> On Mon, Aug 3, 2009 at 12:45 PM, Phoenix >>> Rising<[email protected] >>>> wrote: >> >>>> I'm developing an application where I need to have all sessions >>>> that >>>> have been inactive for X minutes (in this case, I'm thinking 10 >>>> minutes, but I'm flexible to a point) automatically purged from the >>>> database (using ActiveRecord session store). >> >>>> However, I'm concerned that running a rake task every 10 minutes >>>> could have some performance issues. >> >>> This is something I've been looking into (but not implemented) and >>> the problem with this approach seems to be the startup overhead of >>> loading your Rails environment over and over. >> >>> So you might want to look at the various daemon options, i.e. just >>> run something continuously to periodically expunge old sessions. >> >>> FWIW, >>> -- >> >> Well, what you are both looking at doing is: >> >> Session.delete_all, :conditions => ['updated_at < ?', 10.minutes.ago] >> >> That translates into a pretty quick database query, depending on the >> number of sessions you anticipate having. WDYT?- Hide quoted text - Out of curiosity, is there a reason the cookie-based sessions would not work for you? These auto-clean and don't clutter up your database. For your security timeout, I'd suggest something like this: # application.rb (or application_controller.rb if it's a new rails app) around_filter :check_auto_logout # This needs to be run first to make sure we don't have stale expired sessions def check_auto_logout begin if logged_in? && current_user.is_parent? && session[:session_expiry] && session[:session_expiry] < Time.now session[:user_id] = nil # could remove a database row, if need be end rescue ActiveRecord::RecordNotFound # Handle stale session cookie problems. session[:user_id] = nil end yield session[:session_expiry] = Rails.env.development? ? 1.hour.since : 5.minutes.since end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

