Weird "session-bug" when using multiple calls

Hi!

Can someone understand why this happens?

http://pastebin.com/mde5f1b7


#controller
class StartController < ApplicationController
append_before_filter :get_page_settings
def get_page_settings()
session[:testlist] ||= Hash.new
end

    def fillsession
            render :update do |page|
                    page.alert(session[:testlist].inspect)
                    session[:testlist]["ken"] = "man"
                    session[:testlist]["barbie"] = "woman"
                    page.alert(session[:testlist].inspect)
            end
    end

    def printstart
            render :partial => "startnav"
    end

end

#index.rhtml

<%=link_to_remote(“Fill session”, :url => { :action => “fillsession” })
%>

#_startnav.rhtml
<% sleep(5); %>
Hello World!

#1. I go to start/index
#2. The printstart trigger but starts to sleep
#3. Meanwhile I push the “Fill session”-link, which first alerts an
empty Hash, then {“barbie”=>“woman”, “ken”=>“man”}
#4. The sleep is over and Hello World! displays
#5. I push the “Fill session”-link again. It should now alert
{“barbie”=>“woman”, “ken”=>“man”} two times, but instead the session
is empty and alerts an empty hash the first time :frowning: Why?

Thanks a million! Nice to hear I’m not alone and just imagining things
up :smiley: Tried the plugin and it works great!

Is this bug known to the RoR-developers btw?

On 26 Feb 2008, at 16:50, [email protected] wrote:

Hi!

Can someone understand why this happens?

Yes - I ran into this and wrote it up a while back:
http://www.texperts.com/2007/05/01/race-conditions-in-rails-sessions-and-how-to-fix-them/

Fred

On 27 Feb 2008, at 09:21, [email protected] wrote:

Thanks a million! Nice to hear I’m not alone and just imagining things
up :smiley: Tried the plugin and it works great!

Is this bug known to the RoR-developers btw?

I did raise this on trac a while back, but the overall response was
that it wasn’t enough of an issue for most people (and with the
cookiestore it’s not even possible to do this, since you can’t reload
the session data).

Fred