How force that session is loaded?

ruby-on-rails, ruby-on-rails-3, ruby-on-rails-3.2, session

Solution

I found a way to force initialization of the session. Accessing the session apparently does not force initialization but writing into the session does. What I do in my controller is this now:

class MyController < ApplicationController
  protect_from_forgery
  def index
    session["init"] = true
    do_stuff
  end
end

Still I'm not sure if this should be considered normal behavior in Rails. It doesn't look right to me having to write into the session to force initialization. Reading should be enough.

Problem

I'm working on an application that needs to use session id information. My session is stored in cookies. The problem I have is that my session is not immediately available to the controller when a user comes to the site for the first time. I think I may be missing something about how sessions are initialized in Rails. But I'm positve about the fact that the session is not loaded because this is the output of `session.inspect`: ``` #<Rack::Session::Abstract::SessionHash:0x15cb970 not yet loaded> ``` Here is how to reproduce the problem with `Rails 3.2.11` and `ruby 1.9.3`: Create a new application with a `test` controller: ``` rails new my_app cd my_app/ rails g controller test rm app/assets/javascripts/test.js.coffee touch app/views/test/index.html.erb ``` Try to get the session id in that controller: ``` class TestController < ApplicationController def index puts session[:session_id] puts session.inspect end end ``` Add the needed routes: ``` MyApp::Application.routes.draw do resources :test end ``` Then access the application and see what it does: ``` rails server ``` got to: `http://localhost:3000/test` That is the output in the console: ``` #<Rack::Session::Abstract::SessionHash:0x3fd10f50eea0 not yet loaded> ``` Then again `http://localhost:3000/test` and this time we have a session: ``` 400706c0b3d95a5a1e56521e455075ac {"session_id"=>"400706c0b3d95a5a1e56521e455075ac", "_csrf_token"=>"Euaign8Ptpj/o/8/ucBFMgxGtiH7goKxkxeGctumyGQ="} ```

Original source

Related problems