From 24711e1e29cfafe3020c32ffda12193c7b371e2b Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 11 Feb 2014 23:22:39 -0600 Subject: [PATCH] Backport env['rack.session.options'][:skip] --- .../action_controller/session/cookie_store.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/actionpack/lib/action_controller/session/cookie_store.rb b/actionpack/lib/action_controller/session/cookie_store.rb index 3ed2a9e961..6672123648 100644 --- a/actionpack/lib/action_controller/session/cookie_store.rb +++ b/actionpack/lib/action_controller/session/cookie_store.rb @@ -37,7 +37,7 @@ module Session # Note that changing digest or secret invalidates all existing sessions! class CookieStore include AbstractStore::SessionUtils - + # Cookies can typically store 4096 bytes. MAX = 4096 SECRET_MIN_LENGTH = 30 # characters @@ -95,14 +95,21 @@ def initialize(app, options = {}) def call(env) prepare!(env) - + status, headers, body = @app.call(env) session_data = env[ENV_SESSION_KEY] options = env[ENV_SESSION_OPTIONS_KEY] request = ActionController::Request.new(env) - + if !(options[:secure] && !request.ssl?) && (!session_data.is_a?(AbstractStore::SessionHash) || session_data.loaded? || options[:expire_after]) + + # Backport standard Rack::Session::Cookie behavior + # Skip writing session if env['rack.session.options'][:skip] is set + if options[:skip] + return [status, headers, body] + end + session_data.send(:load!) if session_data.is_a?(AbstractStore::SessionHash) && !session_data.loaded? persistent_session_id!(session_data) @@ -122,7 +129,7 @@ def call(env) end private - + def prepare!(env) env[ENV_SESSION_KEY] = AbstractStore::SessionHash.new(self, env) env[ENV_SESSION_OPTIONS_KEY] = AbstractStore::OptionsHash.new(self, env, @default_options) @@ -133,7 +140,7 @@ def load_session(env) data = persistent_session_id!(data) [data[:session_id], data] end - + def extract_session_id(env) if data = unpacked_cookie_data(env) persistent_session_id!(data) unless data.empty? -- GitLab