aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorJohan Sörensen <johan@johansorensen.com>2009-05-28 09:35:17 -0500
committerJoshua Peek <josh@joshpeek.com>2009-05-28 09:35:17 -0500
commitdd98280e38d640f5724887cf8a715b79f0439d2d (patch)
treec51dfb5b8053bbc9fa3da90c9c6284a0969e6307 /actionpack/lib
parent72cb6f58be6590ac2590eea420a1b3ef175189b3 (diff)
downloadrails-dd98280e38d640f5724887cf8a715b79f0439d2d.tar.gz
rails-dd98280e38d640f5724887cf8a715b79f0439d2d.tar.bz2
rails-dd98280e38d640f5724887cf8a715b79f0439d2d.zip
Only save the session if we're actually writing to it [#2703 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_dispatch/middleware/session/abstract_store.rb11
1 files changed, 10 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb b/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb
index 03761b10bd..6d109f4624 100644
--- a/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb
+++ b/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb
@@ -15,6 +15,7 @@ module ActionDispatch
@by = by
@env = env
@loaded = false
+ @updated = false
end
def session_id
@@ -32,6 +33,7 @@ module ActionDispatch
def []=(key, value)
load! unless @loaded
super(key.to_s, value)
+ @updated = true
end
def to_hash
@@ -79,6 +81,10 @@ module ActionDispatch
@loaded
end
+ def updated?
+ @updated
+ end
+
def load!
stale_session_check! do
id, session = @by.send(:load_session, @env)
@@ -147,7 +153,10 @@ module ActionDispatch
options = env[ENV_SESSION_OPTIONS_KEY]
if !session_data.is_a?(AbstractStore::SessionHash) || session_data.send(:loaded?) || options[:expire_after]
- session_data.send(:load!) if session_data.is_a?(AbstractStore::SessionHash) && !session_data.send(:loaded?)
+ if session_data.is_a?(AbstractStore::SessionHash)
+ session_data.send(:load!) if !session_data.send(:loaded?)
+ return response if !session_data.send(:updated?)
+ end
sid = options[:id] || generate_sid