'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.