mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Performance: patch cgi/session/pstore to require digest/md5 once rather than per #initialize. Closes #7583.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6431 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
f596dda0bb
commit
814dd007e5
3 changed files with 33 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Performance: patch cgi/session/pstore to require digest/md5 once rather than per #initialize. #7583 [Stefan Kaes]
|
||||
|
||||
* Undeprecate redirect_to with Hash argument and additional url_for parameters. #7837 [subelsky]
|
||||
|
||||
* Cookie session store: ensure that new sessions doesn't reuse data from a deleted session in the same request. [Jeremy Kemper]
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
# CGI::Session::Pstore.initialize requires 'digest/md5' on every call.
|
||||
# This makes sense when spawning processes per request, but is
|
||||
# unnecessarily expensive when serving requests from a long-lived
|
||||
# process.
|
||||
require 'cgi/session'
|
||||
require 'cgi/session/pstore'
|
||||
require 'digest/md5'
|
||||
|
||||
class CGI::Session::Pstore #:nodoc:
|
||||
def initialize(session, option={})
|
||||
dir = option['tmpdir'] || Dir::tmpdir
|
||||
prefix = option['prefix'] || ''
|
||||
id = session.session_id
|
||||
md5 = Digest::MD5.hexdigest(id)[0,16]
|
||||
path = dir+"/"+prefix+md5
|
||||
path.untaint
|
||||
if File::exist?(path)
|
||||
@hash = nil
|
||||
else
|
||||
unless session.new_session
|
||||
raise CGI::Session::NoSession, "uninitialized session"
|
||||
end
|
||||
@hash = {}
|
||||
end
|
||||
@p = ::PStore.new(path)
|
||||
@p.transaction do |p|
|
||||
File.chmod(0600, p.path)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2,6 +2,7 @@ require 'action_controller/cgi_ext/cgi_ext'
|
|||
require 'action_controller/cgi_ext/cookie_performance_fix'
|
||||
require 'action_controller/cgi_ext/raw_post_data_fix'
|
||||
require 'action_controller/cgi_ext/session_performance_fix'
|
||||
require 'action_controller/cgi_ext/pstore_performance_fix'
|
||||
require 'action_controller/session/cookie_store'
|
||||
|
||||
module ActionController #:nodoc:
|
||||
|
|
Loading…
Reference in a new issue