зеркало из https://github.com/github/ruby.git
[ruby/cgi] Extract CGI::Session#new_store_file
https://github.com/ruby/cgi/commit/b3e2ff9164
This commit is contained in:
Родитель
e307627b6c
Коммит
6eb500e2df
|
@ -189,6 +189,47 @@ class CGI
|
|||
end
|
||||
private :create_new_id
|
||||
|
||||
|
||||
# Create a new file to store the session data.
|
||||
#
|
||||
# This file will be created if it does not exist, or opened if it
|
||||
# does.
|
||||
#
|
||||
# This path is generated under _tmpdir_ from _prefix_, the
|
||||
# digested session id, and _suffix_.
|
||||
#
|
||||
# +option+ is a hash of options for the initializer. The
|
||||
# following options are recognised:
|
||||
#
|
||||
# tmpdir:: the directory to use for storing the FileStore
|
||||
# file. Defaults to Dir::tmpdir (generally "/tmp"
|
||||
# on Unix systems).
|
||||
# prefix:: the prefix to add to the session id when generating
|
||||
# the filename for this session's FileStore file.
|
||||
# Defaults to "cgi_sid_".
|
||||
# suffix:: the prefix to add to the session id when generating
|
||||
# the filename for this session's FileStore file.
|
||||
# Defaults to the empty string.
|
||||
def new_store_file(option={}) # :nodoc:
|
||||
dir = option['tmpdir'] || Dir::tmpdir
|
||||
prefix = option['prefix']
|
||||
suffix = option['suffix']
|
||||
require 'digest/md5'
|
||||
md5 = Digest::MD5.hexdigest(session_id)[0,16]
|
||||
path = dir+"/"
|
||||
path << prefix if prefix
|
||||
path << md5
|
||||
path << suffix if suffix
|
||||
if File::exist? path
|
||||
hash = nil
|
||||
elsif new_session
|
||||
hash = {}
|
||||
else
|
||||
raise NoSession, "uninitialized session"
|
||||
end
|
||||
return path, hash
|
||||
end
|
||||
|
||||
# Create a new CGI::Session object for +request+.
|
||||
#
|
||||
# +request+ is an instance of the +CGI+ class (see cgi.rb).
|
||||
|
@ -373,21 +414,8 @@ class CGI
|
|||
# This session's FileStore file will be created if it does
|
||||
# not exist, or opened if it does.
|
||||
def initialize(session, option={})
|
||||
dir = option['tmpdir'] || Dir::tmpdir
|
||||
prefix = option['prefix'] || 'cgi_sid_'
|
||||
suffix = option['suffix'] || ''
|
||||
id = session.session_id
|
||||
require 'digest/md5'
|
||||
md5 = Digest::MD5.hexdigest(id)[0,16]
|
||||
@path = dir+"/"+prefix+md5+suffix
|
||||
if File::exist? @path
|
||||
@hash = nil
|
||||
else
|
||||
unless session.new_session
|
||||
raise CGI::Session::NoSession, "uninitialized session"
|
||||
end
|
||||
@hash = {}
|
||||
end
|
||||
option = {'prefix' => 'cgi_sid_'}.update(option)
|
||||
@path, @hash = session.new_store_file(option)
|
||||
end
|
||||
|
||||
# Restore session state from the session's FileStore file.
|
||||
|
|
|
@ -44,20 +44,8 @@ class CGI
|
|||
# This session's PStore file will be created if it does
|
||||
# not exist, or opened if it does.
|
||||
def initialize(session, option={})
|
||||
dir = option['tmpdir'] || Dir::tmpdir
|
||||
prefix = option['prefix'] || ''
|
||||
id = session.session_id
|
||||
require 'digest/md5'
|
||||
md5 = Digest::MD5.hexdigest(id)[0,16]
|
||||
path = dir+"/"+prefix+md5
|
||||
if File::exist?(path)
|
||||
@hash = nil
|
||||
else
|
||||
unless session.new_session
|
||||
raise CGI::Session::NoSession, "uninitialized session"
|
||||
end
|
||||
@hash = {}
|
||||
end
|
||||
option = {'suffix'=>''}.update(option)
|
||||
path, @hash = session.new_store_file(option)
|
||||
@p = ::PStore.new(path)
|
||||
@p.transaction do |p|
|
||||
File.chmod(0600, p.path)
|
||||
|
|
Загрузка…
Ссылка в новой задаче