'depot'app, trouble with session / cookies

Many of you probably know the ‘depot’ app from the ‘Agile Rails
development’ book.

When the view changes from ‘Store’ to ‘display_cart,’ a session
containing the shopping-cart (:cart) is supposed maintain the ‘cart’
between calls, but when the display_cart stub view shows up, I have
always ZERO elements in the cart!

I have received valuable help already, but the issue seems less
understandable than I thought at first. Here’s a resumen:

I have constructed the ‘products’ model, the Store-controller, and the
‘Cart’ and ‘Line Item’ classes. I have told Application-controller
about
:cart and :line_item:

model :cart
model :line_item

Here’s part of the Store_controller:

def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
#1# breakpoint “hallo”
redirect_to(:action => ‘display_cart’)
end

def display_cart
@cart = find_cart
@items = @cart.items
end

private
def find_cart
session[:cart] ||= Cart.new
end

#1# At this breakpoint I can verify that the cart contains the correct
product, and the session is ok.

Then the view changes to the test-stub ‘display_cart,’ which looks like
this:

Display Cart

Your cart contains <%= @items.size %> items.

Every time, no matter how many times I back up and add products, the
@items.size evaluates to ZERO. So the session and the cart get lost.
Both my browsers have cookies enabled, but in the
cookie-list, I can’t find any cookie which associates to this
application (under WEBrick).

Any suggestions?

(New msg:)
I did some more breakpointing in the ‘display_cart’
method:

def display_cart
# 1 # breakpoint “hello”
@cart = find_cart
@items = @cart.items
# 2 # breakpoint “hello”
end

At the second #2# breakpoint, there was an empty session, but that was
of course created by the ‘find_cart’ call. At the first #1# breakpoint,
the session was in fact nil.

When I set <%=session.session_id%> in the views, it is always exactly
the same in the ‘store’ view, (but changes every time in the
‘display_cart’ view).
And the _session_id COOKIE never appears in Firefox cookie-list.
From this, it seems the server (WEBrick) doesn’t send the session
cookie to the browser.

(New msg:)

Yeah, now I use ‘Live HTTP Headers,’ and it shows that WEBrick never
sends the cookie to Firefox from my application.
All other web-sites send cookies to their heart’s delight, I can see
that directly in the ‘Headers’ window.

(New msg:)

This is getting stranger all the time…
I’ve switched to Apache (v. 1.33…). It’s s-l-o-w, extremely slow,
but the pages keep popping up correctly.

But the cart still always contains ZERO items!

In the Store-view,(where I peek with <%=session.session_id%>), the
_session_id is always the same, and in the ‘Live HTTP Headers’ window,
there is also a _session_id from ‘add_to_cart’ which is the same at
every access to the page, BUT THE TWO are DIFFERENT. Rephrasing it more
clearly:

Every time I go back to the 'Store-view," I can see that the session-id
is the same at every page access (peeking with <%=session.session_id%>),
but in the browser’s ‘Live HTTP Headers’ window, the _session-id is a
different one, but always the same at recurring sendings to the browser.

The session-id ought to be the same, doesn’t it?

Do you understand anything? I’ve been stuck here for nearly 2 weeks
now.
(Thanks to Christian K. for great help in circling in the bug)

Reagards, Audun.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs