From: rio-t@... Date: 2002-09-21T20:04:42+09:00 Subject: [ruby-list:35983] Re: Cookie こんにちは、高石です。 From: 金光雅夫 (KANEMITSU Masao) Subject: [ruby-list:35982] Re: Cookie > > ソースを見たのですがFileStoreはCGI::Sessionのインナークラスで、 > > ここで言う'database_manager'と言うのはCGI::Session専用の物ですね。 > > > > PStoreを利用することも可能だと思いますが、インターフェースが > > 異なるためFileStoreと同じインターフェースで扱えるように > > 接続用のクラスを独自に定義する必要がでてきます。 > > うがが。 FileStoreを参考に(というかほぼそのまま流用)作ってみました。 sess = CGI::Session.new(cgi, "database_manager" => PileStore) などとして使ってみて下さい。 # クラス名適当;-P class PileStore require 'pstore' def check_id(id) /[^0-9a-zA-Z]/ =~ id.to_s ? false : true end def initialize(session, option={}) dir = option['tmpdir'] || ENV['TMP'] || '/tmp' prefix = option['prefix'] || '' id = session.session_id unless check_id(id) raise ArgumentError, "session_id `%s' is invalid" % id end path = dir+"/"+prefix+id path.untaint @db = PStore.new(path) end def restore unless @hash @db.transaction do @hash = if @db.root?('hash') @db['hash'] else {} end end end @hash end def update return unless @hash @db.transaction do @db['hash'] = @hash end end def close update end def delete File::unlink @db.path end end じっくりソースを追ってないので、不具合があるかもしれません。 一応、簡単なテストで sess['hoge'] = foo としたものが、次の実 行時にsess['hoge']で無事に取り出せることだけ確認しました。 /--------------------------------------------------------/ 高石 勇人 < rio-t@presen.to > PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc /--------------------------------------------------------/