[ruby/cgi] Extract CGI::Session#new_store_file
https://github.com/ruby/cgi/commit/b3e2ff9164
This commit is contained in:
parent
e307627b6c
commit
6eb500e2df
@ -189,6 +189,47 @@ class CGI
|
|||||||
end
|
end
|
||||||
private :create_new_id
|
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+.
|
# Create a new CGI::Session object for +request+.
|
||||||
#
|
#
|
||||||
# +request+ is an instance of the +CGI+ class (see cgi.rb).
|
# +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
|
# This session's FileStore file will be created if it does
|
||||||
# not exist, or opened if it does.
|
# not exist, or opened if it does.
|
||||||
def initialize(session, option={})
|
def initialize(session, option={})
|
||||||
dir = option['tmpdir'] || Dir::tmpdir
|
option = {'prefix' => 'cgi_sid_'}.update(option)
|
||||||
prefix = option['prefix'] || 'cgi_sid_'
|
@path, @hash = session.new_store_file(option)
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Restore session state from the session's FileStore file.
|
# 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
|
# This session's PStore file will be created if it does
|
||||||
# not exist, or opened if it does.
|
# not exist, or opened if it does.
|
||||||
def initialize(session, option={})
|
def initialize(session, option={})
|
||||||
dir = option['tmpdir'] || Dir::tmpdir
|
option = {'suffix'=>''}.update(option)
|
||||||
prefix = option['prefix'] || ''
|
path, @hash = session.new_store_file(option)
|
||||||
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
|
|
||||||
@p = ::PStore.new(path)
|
@p = ::PStore.new(path)
|
||||||
@p.transaction do |p|
|
@p.transaction do |p|
|
||||||
File.chmod(0600, p.path)
|
File.chmod(0600, p.path)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user