類別 CGI::Session::FileStore
基於檔案的會話儲存類別。
將會話儲存實作為「key=value」值的平面檔案。此儲存類型僅與 String
值直接搭配使用;使用者負責在儲存時將其他類型轉換為字串,在擷取時則從字串轉換。
公開類別方法
new(session, option={}) 按一下以切換原始碼
建立新的 FileStore
實例。
此建構函式由 CGI::Session
內部使用。使用者通常不需要直接呼叫它。
session
是為其建立此實例的會話。會話 ID 只能包含字母數字字元;自動產生的會話 ID 會遵守此需求。
option
是初始化函式的選項雜湊。識別下列選項
- tmpdir
-
用於儲存
FileStore
檔案的目錄。預設為Dir::tmpdir
(在 Unix 系統上通常為「/tmp」)。 - prefix
-
在產生此會話的
FileStore
檔案的檔案名稱時,要新增到會話 ID 的字首。預設為「cgi_sid_」。 - suffix
-
在產生此會話的
FileStore
檔案的檔案名稱時,要新增到會話 ID 的字尾。預設為空字串。
如果此會話的 FileStore
檔案不存在,系統會建立它;如果存在,系統會開啟它。
# File lib/cgi/session.rb, line 416 def initialize(session, option={}) option = {'prefix' => 'cgi_sid_'}.update(option) @path, @hash = session.new_store_file(option) end
公開實例方法
close() 按一下以切換原始碼
更新並關閉會話的 FileStore
檔案。
# File lib/cgi/session.rb, line 463 def close update end
delete() 按一下以切換原始碼
關閉並刪除會話的 FileStore
檔案。
# File lib/cgi/session.rb, line 468 def delete File::unlink @path+".lock" rescue nil File::unlink @path+".new" rescue nil File::unlink @path rescue nil end
restore() 按一下以切換來源
從會話的 FileStore
檔案還原會話狀態。
以雜湊方式傳回會話狀態。
# File lib/cgi/session.rb, line 424 def restore unless @hash @hash = {} begin lockf = File.open(@path+".lock", "r") lockf.flock File::LOCK_SH f = File.open(@path, 'r') for line in f line.chomp! k, v = line.split('=',2) @hash[CGI.unescape(k)] = Marshal.restore(CGI.unescape(v)) end ensure f&.close lockf&.close end end @hash end
update() 按一下以切換來源
將會話狀態儲存到會話的 FileStore
檔案。
# File lib/cgi/session.rb, line 445 def update return unless @hash begin lockf = File.open(@path+".lock", File::CREAT|File::RDWR, 0600) lockf.flock File::LOCK_EX f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600) for k,v in @hash f.printf "%s=%s\n", CGI.escape(k), CGI.escape(String(Marshal.dump(v))) end f.close File.rename @path+".new", @path ensure f&.close lockf&.close end end