聲明 : 此文章未經本人同意,請不要轉載 (以下為本人學習成果,不想因小弟不才而誤人子弟丫)
花了 2 小時,粗略看了看 cgi.rb , cgi/session.rb 的代碼,終於得到了一點頭緒,終於免強地支援了 session 的輸出,不用再使用手冊上的那個方法,因為他一定要有 cgi.out 的輸出,而同時在 Block 內一定要有資料,資料長度不能為 “0”, 否則會出錯:
手冊上的 :
1 2 3 4 5 6 7 8
| require "cgi" cookie = CGI::Cookie.new("rubyweb", "CustID=123", "Part=ABC"); cgi = CGI.new("html3") cgi.out( "cookie" => [cookie] ){ cgi.html{ "\nHTML content here" } }
|
而我的方法只要這樣,必須大於零的條件刪去了,只要用以下的方法就可以
1 2 3 4 5
| require "cgi" cookie = CGI::Cookie.new("rubyweb", "CustID=123", "Part=ABC"); cgi = CGI.new cgi.out([cookie]) {""} puts "nHTML content here"
|
簡化了很多東西,而且將 out 這個方法內處理日文 Charset 資料都刪除,我想效率會好一點,因為都用 utf-8 的 = =
下面是我所測試時寫的代碼 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
require "cgi" require "cgi/session"
class CGI def out(options = "text/html") options = { "type" => options } if options.kind_of?(String) content = yield
output = stdoutput output.binmode if defined? output.binmode output.print header(options) output.print content unless "HEAD" == env_table['REQUEST_METHOD'] end end
begin cgi = CGI.new if cgi['sk'] == 'me' cgi.out{""} cookies = cgi.cookies session = CGI::Session.new( cgi, "session_key" => "rubyweb", "prefix" => "web-session.") puts "Me Page" puts "<hr />" puts "<b>Session : #{session['CustID']} - #{session['Part']}</b>" puts "<br />" puts "<b>Cookies : #{cookies['CustID'][0]} - #{cookies['Part'][0]}</b>" else session = CGI::Session.new( cgi, "session_key" => "rubyweb", "session_id" => "9650", "new_session" => true, "prefix" => "web-session.") cookie1 = CGI::Cookie.new('CustID', '0001E') cookie2 = CGI::Cookie.new('Part', 'C_user') cgi.out("cookie" => [cookie1, cookie2]) {""} session["CustID"] = '0002E' session["Part"] = "S_User"
puts "<a href='index.rb?sk=me'>link To Self</a> - <a href='page.rb'>Link To Page.rb</a>" end
rescue => e cgi.out{""} p e.message end
|
page.rb 的代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
require "cgi" require "cgi/session"
cgi = CGI.new sess = CGI::Session.new( cgi, "session_key" => "rubyweb", "prefix" => "web-session.") cookie = cgi.cookies
begin puts "Content-type: text/html; charset=utf-8\r\n\r\n" puts "Session Customer #{sess['CustID']} orders an #{sess['Part']}" puts "<br />" puts "Cookies Customer #{cookie['CustID'][0]} orders an #{cookie['Part'][0]}" rescue p e.message end
|