rails session handling on windows problems

I'm doing a simple demo on a windows box, showing how simple it is to do a user login page, using code from the Agile Programming with Rails book.

Unfortunately, it's not acting simple.

This is the view for the login.

<% @page_title = 'Login' %> <%= error_messages_for 'user' %>

<h1>Login</h1>

<% if session[:user_id] %> <%= start_form_tag :action => 'login' %>   <%= render :partial => 'users/form' %>   <%= submit_tag "Login" %> <%= end_form_tag %> <% else %> <p>You are logged-in.</p> <% end %>

<% if session[:user_id] %> <p>You can logout here.</p>     <%= link_to 'Logout', :action => 'logout' %> <% end %>

Even though both of these sections depend on the :user_id symbol in the session hash, the first one is working and the second is not.

Also, while logout will run when told, for some reason it stays logged-in.

Here are the login and logout actions.

def login         if request.get?             session[:user_id] = nil             @user = User.new         else             @user = User.new(params[:user])             begin                 logged_in_user = @user.try_to_login             rescue                 flash[:notice] = "System error in login attempt!"                 render             end             if logged_in_user                 session[:user_id] = logged_in_user.id                 flash[:notice] = "Logged in as #{logged_in_user.name}!"                 redirect_to(:controller => 'login', :action => 'index')             else                 flash[:notice] = "Invalid user/password combination"             end         end   end

  def logout     session[:user_id] = nil     flash[:notice] = "You are logged-out"     redirect_to(:action => 'index')   end

I'm lost. I'm doing something similar on a linux box and it works fine.

Is this a problem with Rails on Windows?

Thanks, Mike

Keynan Pratt wrote:

#First change the view to be

<%= error_messages_for 'user' %>

<h1><%= @page_title || 'Login' %></h1>

<% if @logged_in? -%>

What provides @logged_in? ? That looks like a method call but you're referencing it like an instance variable, and it's nowhere in my code.

I do see that my logic was bad here, but worse, in my controller, if you visit the login page you are logged-out. This was the core issue.

Thanks, Mike