Skip to content

Commit

Permalink
Fixed reset_session for ActiveRecord session store [#2108 state:resol…
Browse files Browse the repository at this point in the history
…ved]
  • Loading branch information
josh committed Mar 3, 2009
1 parent 4d4d2c3 commit 9b1b88f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
21 changes: 21 additions & 0 deletions actionpack/test/activerecord/active_record_store_test.rb
Expand Up @@ -21,6 +21,11 @@ def get_session_value
render :text => "foo: #{session[:foo].inspect}"
end

def call_reset_session
reset_session
head :ok
end

def rescue_action(e) raise end
end

Expand Down Expand Up @@ -61,6 +66,22 @@ def test_getting_nil_session_value
end
end

def test_setting_session_value_after_session_reset
with_test_route_set do
get '/set_session_value'
assert_response :success
assert cookies['_session_id']

get '/call_reset_session'
assert_response :success
assert_not_equal [], headers['Set-Cookie']

get '/get_session_value'
assert_response :success
assert_equal 'foo: nil', response.body
end
end

def test_prevents_session_fixation
with_test_route_set do
get '/set_session_value'
Expand Down
10 changes: 7 additions & 3 deletions activerecord/lib/active_record/session_store.rb
Expand Up @@ -287,16 +287,15 @@ def destroy
def get_session(env, sid)
Base.silence do
sid ||= generate_sid
session = @@session_class.find_by_session_id(sid)
session ||= @@session_class.new(:session_id => sid, :data => {})
session = find_session(sid)
env[SESSION_RECORD_KEY] = session
[sid, session.data]
end
end

def set_session(env, sid, session_data)
Base.silence do
record = env[SESSION_RECORD_KEY]
record = env[SESSION_RECORD_KEY] ||= find_session(sid)
record.data = session_data
return false unless record.save

Expand All @@ -310,5 +309,10 @@ def set_session(env, sid, session_data)

return true
end

def find_session(id)
@@session_class.find_by_session_id(id) ||
@@session_class.new(:session_id => id, :data => {})
end
end
end

0 comments on commit 9b1b88f

Please sign in to comment.