:active_record_store + :table_name_with_underscore session issues


#1

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.


Greg D.
http://destiney.com/


#2

You may want to browse:

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

and

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

Good luck!
Tim


#3

On 29 Jan 2009, at 00:26, Tim wrote:

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
to :table_name_with_underscore rails wants to use session_id as the
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


#4

On Wed, Jan 28, 2009 at 6:35 PM, Frederick C.
removed_email_address@domain.invalid wrote:

Hmm. The problem you have is that by setting primary key
to :table_name_with_underscore rails wants to use session_id as the
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.

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.


Greg D.
http://destiney.com/