I have a controller method that processes data submitted from a form,
one item of which is a large file. This method gives me the following
error:
CGI::Session::CookieStore::CookieOverflow
I understand the source of the error is the cookie being too large but
what confuses me is no where in the controller do I directly touch the
session. Obviously something is getting put in the session but I
don't know what or how. Does rails push any controller objects into
the session by default?
I have a controller method that processes data submitted from a form,
one item of which is a large file. This method gives me the following
error:
CGI::Session::CookieStore::CookieOverflow
I understand the source of the error is the cookie being too large but
what confuses me is no where in the controller do I directly touch the
session. Obviously something is getting put in the session but I
don't know what or how. Does rails push any controller objects into
the session by default?
The flash is stored in the session but that's about that. What does
your controller look like ?
I switched to database session store and the problem went away but I'm
still curious as to why it occurred in the first place.
Here's my action. There are no calls to any other controller
methods. In fact search for "session" shows it does not occur
anywhere in my controller. My controller inherits from
ApplicationController so there's nothing else added by me.
def create
@maid=Maid.new(params[:maid])
design=Design.new(:design=>params[:genbank_file].readlines.join)
@maid.designs<<design
strategy=Strategy.find(params[:strategy_id])
maid_strategy=case
when strategy==Strategy.PCR: PCR.new(:strategy=>strategy)
when strategy==Strategy.PCRtm: PCRTM.new(:strategy=>strategy)
when strategy==Strategy.GSD: GSD.new(:strategy=>strategy)
when strategy==Strategy.GSDtm: GSDTM.new(:strategy=>strategy)
end
maid_strategy.maid=@maid
maid_strategy.design=design
maid_strategy.deletion_desc=params[:deletion_desc]
@strategies=Strategy.find(:all)
if maid_strategy.save
flash[:notice]='Design has been saved.'
@maid=Maid.new
else
flash[:notice]="Error saving design."
render :action=>'new' and return
end
render :action=>'new'
end
I switched to database session store and the problem went away but I'm
still curious as to why it occurred in the first place.
database session stores don't have the same size limit (cookies are
limited to 4k)
Here's my action. There are no calls to any other controller
methods. In fact search for "session" shows it does not occur
anywhere in my controller. My controller inherits from
ApplicationController so there's nothing else added by me.
Doesn't seem to be much there. The problem could conceivably be
elsewhere in the app (ie something else makes the session nearly full,
and then the small amount of data added to the flash in this action
tips you over the edge)
Searching through my code, I don't touch the session anywhere except
for authentication actions which I currently have deactivated anyway,
plus they are only storing a user_id, not an object.
the file I'm uploading is about 700kb. The processing creates a large
object graph which is then saved to the db. Nowhere does it touch the
session, from what I can tell. I guess I'll just stick with db
session store for now. Weird...
Searching through my code, I don't touch the session anywhere except
for authentication actions which I currently have deactivated anyway,
plus they are only storing a user_id, not an object.
the file I'm uploading is about 700kb. The processing creates a large
object graph which is then saved to the db. Nowhere does it touch the
session, from what I can tell. I guess I'll just stick with db
session store for now. Weird...
thanks for the input.
Might be worth dumping the contents of the session to the page or
something - once you can see what it is that is taking up all the
space I would hope that it would be easy to work out who is putting it
there.