<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -36,7 +36,7 @@ class SmartSessionStore &lt; ActionController::Session::AbstractStore
 
   def set_session(env, sid, session_data)
     ActiveRecord::Base.silence do
-      record = env[SESSION_RECORD_KEY] ||= find_session(sid)
+      record = get_session_model(env, sid)
 
       data, session = save_session(record, session_data)
       env[SESSION_RECORD_KEY] = session
@@ -45,6 +45,14 @@ class SmartSessionStore &lt; ActionController::Session::AbstractStore
     return true
   end
 
+  def get_session_model(env, sid)
+    if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
+      env[SESSION_RECORD_KEY] = find_session(sid)
+    else
+      env[SESSION_RECORD_KEY] ||= find_session(sid)
+    end
+  end
+  
   def find_session(id)
     @@session_class.find_session(id) ||
       @@session_class.create_session(id, marshalize({}))</diff>
      <filename>lib/smart_session_store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,8 @@ require 'action_controller'
 
 require 'active_support/test_case'
 require 'active_record/fixtures'
+require 'action_pack'
+require 'action_controller'
 
 if defined? ActiveRecord::TestFixtures # this is rails 2.3+
   class ActiveSupport::TestCase</diff>
      <filename>test/test_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ class SmartSessionTest &lt; ActiveSupport::TestCase
   def setup
     @env = { ActionController::Session::AbstractStore::ENV_SESSION_KEY =&gt; '123456',  ActionController::Session::AbstractStore::ENV_SESSION_OPTIONS_KEY =&gt; ActionController::Session::AbstractStore::DEFAULT_OPTIONS}
     SmartSessionStore.session_class = TEST_SESSION_CLASS
-  end
+  end  
   
   def test_simultaneous_access_session_already_created
     setup_base_session do |base_session|
@@ -127,4 +127,123 @@ class SmartSessionTest &lt; ActiveSupport::TestCase
   end
 end
 
+
+ActionController::Base.session_store = nil
+class FullStackTest &lt; ActionController::IntegrationTest
+  fixtures :sessions
+  
+  DispatcherApp = ActionController::Dispatcher.new
+  SessionApp = SmartSessionStore.new(DispatcherApp,   :key =&gt; '_session_id')
+
+  def setup
+    @integration_session = open_session(SessionApp)
+  end
+    
+  class TestController &lt; ActionController::Base
+
+    def set_session_value
+      session[:foo] = params[:foo] || &quot;bar&quot;
+      head :ok
+    end
+
+    def get_session_value
+      render :text =&gt; &quot;foo: #{session[:foo].inspect}&quot;
+    end
+
+    def get_session_id
+      session[:foo]
+      render :text =&gt; &quot;#{request.session_options[:id]}&quot;
+    end
+
+    def call_reset_session
+      session[:foo]
+      reset_session
+      session[:foo] = &quot;baz&quot;
+      head :ok
+    end
+
+    def rescue_action(e) raise end
+  end
+  
+  def test_setting_and_getting_session_value
+    with_test_route_set do
+      get '/set_session_value'
+      assert_response :success
+      assert cookies['_session_id']
+
+      get '/get_session_value'
+      assert_response :success
+      assert_equal 'foo: &quot;bar&quot;', response.body
+
+      get '/set_session_value', :foo =&gt; &quot;baz&quot;
+      assert_response :success
+      assert cookies['_session_id']
+
+      get '/get_session_value'
+      assert_response :success
+      assert_equal 'foo: &quot;baz&quot;', response.body
+    end
+  end
+
+  def test_getting_nil_session_value
+    with_test_route_set do
+      get '/get_session_value'
+      assert_response :success
+      assert_equal 'foo: nil', response.body
+    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']
+      session_id = 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: &quot;baz&quot;', response.body
+
+      get '/get_session_id'
+      assert_response :success
+      assert_not_equal session_id, response.body
+    end
+  end
+
+  def test_getting_session_id
+    with_test_route_set do
+      get '/set_session_value'
+      assert_response :success
+      assert cookies['_session_id']
+      session_id = cookies['_session_id']
+
+      get '/get_session_id'
+      assert_response :success
+      assert_equal session_id, response.body
+    end
+  end
+
+
+
+
+  private
+    def with_test_route_set
+      with_routing do |set|
+        set.draw do |map|
+          map.with_options :controller =&gt; &quot;full_stack_test/test&quot; do |c|
+            c.connect &quot;/:action&quot;
+          end
+        end
+        yield
+      end
+    end
+  
+end
+
+
+
 end</diff>
      <filename>test/unit/smart_session_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>2f172925c136a10ae2e4d600f54facc96be20aa5</id>
    </parent>
  </parents>
  <author>
    <name>Frederick Cheung</name>
    <email>frederick.cheung@gmail.com</email>
  </author>
  <url>http://github.com/fcheung/smart_session_store/commit/22ef54639f1f86fd89dd7184bc37942be9762a65</url>
  <id>22ef54639f1f86fd89dd7184bc37942be9762a65</id>
  <committed-date>2009-11-04T12:47:32-08:00</committed-date>
  <authored-date>2009-11-04T12:47:32-08:00</authored-date>
  <message>fix reset_session bug in 2.3; better end to end testing</message>
  <tree>fc05beb7170b9cd5957bf18b0d17414b4556348d</tree>
  <committer>
    <name>Frederick Cheung</name>
    <email>frederick.cheung@gmail.com</email>
  </committer>
</commit>
