:active_record_store + :table_name_with_underscore session issues

Today I created a new Rails 2.2.2 project.

I'm using Oracle and activerecord-oracle-adapter (1.0.0.9250).

I'm using ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore, which is a spec for the project that I cannot change.

I ran `rake db:sessions:create` and it created a new migration that looks like this:

class CreateSessions < ActiveRecord::Migration

  def self.up     create_table :sessions do |t|       t.string :session_id, :null => false       t.text :data       t.timestamps     end     add_index :sessions, :session_id     add_index :sessions, :updated_at   end

  def self.down     drop_table :sessions   end

end

This does not work. I get the error: ActionController::InvalidAuthenticityToken on any forms that are posted.

When I look in the sessions table the hashed data in the `data` field looks normal, but there are integers being stored in the session_id field, not the 32 character hashes I would expect. And every page reload creates a new session, the integer stored in the session_id field is incremented by one. I'm thinking session data is being written, but then cannot be retrieved.

I've tried a number of things I found searching, such as:

CGI::Session::ActiveRecordStore::Session.set_primary_key 'session_id'

none of which help. Any idea what I need to do?

I have other, older Rails apps using active_record_store sessions that work just fine, but this is my first one on Rails 2.2.2 and so far it's a no-go.

You may want to browse:

http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

and

Good luck! Tim

When I look in the sessions table the hashed data in the `data` field looks normal, but there are integers being stored in the session_id field, not the 32 character hashes I would expect. And every page reload creates a new session, the integer stored in the session_id field is incremented by one. I'm thinking session data is being written, but then cannot be retrieved.

Hmm. The problem you have is that by setting primary key
primary key to the sessions table. it also wants to use session_id for
the session identifier and for whatever reason, the primary key 'wins'. You could fiddle the SessionClass for it to store the session
identifier in a different column (or
CGI::Session::ActiveRecordStore::Session.set_primary_key 'id' would
probably do the trick if you can get away with it.

Fred

I appreciate the reply but I'm not gonna bother trying to figure it out, I switched to memory sessions this morning and it works with no problems.

I'm not really understanding how I can have another app on Rails 2.0.2 that has this exact same setup and it works fine. Something changed from 2.0.2 -> 2.2.2 which obviously didn't break any Rails core tests.. I mean, if anyone is even testing on anything besides MySQL. To use Rails in medical research means Oracle most of the time.