es war die Nachtigall und nicht die lerche:

Rails.application.config.session_store :cookie_store

und der cookie wird nicht zurückgeschrieben bei :js-calls. Wenn man den session-store in die Datenbank legt, dann funktioniert's sowohl mit :js als auch mit :html.

Grüße
Stefan



rubyonrails...@galt.de
24. Mai 2011 11:15

Ich weiß nicht, ob's daran liegt: In der default Einstellung wird cookie store für die Sessions verwendet und da gibt es ein Limit bei 4096 KB.

Wenn Du noch andere Dinge in der Session gespeichert hast, könnte es sein daß das Limit erreicht ist. Aber dann müßte eigentlich ein Fehler geworfen werden.

Ansonsten würde ich kein Array in der Session ablegen. Vielleicht lieber die jedem Wert einen eigenen Schlüssel geben und mal testen, ob das besser ist.

Nur so, auf die Schnelle.


_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug


Stefan Frank
24. Mai 2011 10:07

Hi Liste,

ich habe gerade ein seltsames Verhalten einer Session: Ich will mir mir zuletzt angesehene ID's in der Session merken, dazu wird in einer action ein array in die Session gelegt:


class TryoutController < ApplicationController

respond_to :js, :html

def stack
    ...
    session[:stack_session] = []
    ...
end


und in einer anderen action werden id's in dieses Array gepackt:

def remember
   session[:stack_session] << params[:card_id] if session[:stack_session]
   render :json => :ok, :status => "200"
end

Und genau das funktioniert nicht wirklich vorhersehbar: mal wird die id hinzugefügt, mal nicht, mal klappt es dreimal hintereinander, mal gar nicht. Merkwürdig ist, dass er den von stack in die Session gelegten Array immer findet, auch der AJAX-Call lokalisiert also die richtige Session, nur Änderungen an dieser Session werden nicht über den Request hinaus gespeichert.

Der entsprechende Test dazu läuft durch, das ganze funktioniert nur nicht, wenn man es durchklickt. Kurioserweise kann man den Controller per :html aufrufen, dann geht's reproduzierbar, nur wenn man den Call per :js macht, dann wird die session vergesslich - hat irgendjemand eine Idee, woran das liegen könnte?!

Grüße
Stefan



_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug

Antwort per Email an