Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: steveklabnik/rails
head fork: steveklabnik/rails
Checking mergeability… Don't worry, you can still create the pull request.
  • 3 commits
  • 2 files changed
  • 0 commit comments
  • 1 contributor
Commits on Sep 01, 2012
@alup alup Assign a new session_id to session options hash 54a0b01
@alup alup Override rack's destroy_session in cookie store 7fd6bd6
@alup alup Force reloading of the session after destroy
Use load_for_write! to ensure a refresh of the session object.
This way the new session_id and the empty data will be stored properly.
E.g. in the case of the session cookie store this means that a new
digest will be returned to the user.
8 actionpack/lib/action_dispatch/middleware/session/cookie_store.rb
@@ -44,6 +44,14 @@ class CookieStore < Rack::Session::Cookie
include StaleSessionCheck
include SessionObject
+ # Override rack's method
+ def destroy_session(env, session_id, options)
+ new_sid = super
+ # Reset hash and Assign the new session id
+ env["action_dispatch.request.unsigned_session_cookie"] = new_sid ? { "session_id" => new_sid } : {}
+ new_sid
+ end
def unpacked_cookie_data(env)
7 actionpack/lib/action_dispatch/request/session.rb
@@ -70,9 +70,12 @@ def options
def destroy
options = self.options || {}
- @by.send(:destroy_session, @env, options[:id], options)
- options[:id] = nil
+ new_sid = @by.send(:destroy_session, @env, options[:id], options)
+ options[:id] = new_sid # Reset session id with a new value or nil
+ # Load the new sid to be written with the response
@loaded = false
+ load_for_write!
def [](key)

No commit comments for this range

Something went wrong with that request. Please try again.