Ruby CGI 餅乾


HTTP協定是無狀態協定。但對於一個商業網站,它需要保持不同的頁間的會話資訊。

如使用者在網站註冊過程中需要跳轉頁面,但又要保證先前填寫的資訊不會遺失。

這種情況下 Cookie 很好的幫我們解決了問題。


Cookie 是如何運作的?

幾乎所有的網站設計者在進行網站設計時都使用了Cookie,因為他們都想給瀏覽網站的使用者提供一個更友善的、人文化的瀏覽環境,同時也能更準確地收集訪客的信息。

寫入與讀取

Cookies集合是附屬於Response物件及Request物件的資料集合,使用時需要在前面加上Response或Request。

用於傳送Cookies給客戶端的語法通常為:

當給不存在的Cookies集合設定時,就會在客戶機創建,如果該Cookies己存在,則會被代替。由於Cookies是作為HTTP傳輸的頭資訊的一部分發給客戶機的,所以向客戶機發送Cookies的程式碼一般放在傳送給瀏覽器的HTML檔案的標記之前。

如果使用者要讀取Cookies,則必須使用Request物件的Cookies集合,其使用方法是: 需要注意的是,只有在伺服器未被下載任何資料給瀏覽器前,瀏覽器才能與Server進行Cookies集合的資料交換,一旦瀏覽器開始接收Server所下載的數據,Cookies的資料交換則停止,為了避免錯誤,要在程式和前面加上response.Buffer=True。

集合的屬性

  • 1.Expires屬性:此屬性用來為Cookies設定一個期限,在期限內只要開啟網頁就可以呼叫已儲存的Cookies,如果過了此期限Cookies就自動被刪除。如: 設定Cookies的有效期限到2004年4月1日,到時將自動刪除。如果一個Cookies沒有設定有效期,則其生命週期從開啟瀏覽器開始,到關閉瀏覽器結束,每次運行後生命週期將結束,下次運行將重新開始。

  • 2.Domain屬性:這個屬性定義了Cookies傳送資料的唯一性。若只將某Cookies傳送給_blank">搜狐首頁時,則可使用以下代碼:

  • 3.Path屬性:定義了Cookies只發給指定的路徑請求,如果Path屬性沒有被設置,則使用應用軟體的預設路徑。使用者讀取。

  • #Ruby 中處理Cookies
  • 你可以建立一個名為cookie 的物件並儲存文字訊息,將該訊息傳送至瀏覽器,呼叫CGI.out 設定cookie的頭部:

    #!/usr/bin/ruby
    
    require "cgi"
    cgi = CGI.new("html4")
    cookie = CGI::Cookie.new('name' => 'mycookie',
                             'value' => 'Zara Ali',
                             'expires' => Time.now + 3600)
    cgi.out('cookie' => cookie) do
       cgi.head + cgi.body { "Cookie stored" }
    end
    接下來我們回到這個頁面,並且找出cookie值,如下所示:

    #!/usr/bin/ruby
    
    require "cgi"
    cgi = CGI.new("html4")
    cookie = cgi.cookies['mycookie']
    cgi.out('cookie' => cookie) do
       cgi.head + cgi.body { cookie[0] }
    end
  • CGI::Cookie物件實例化時包含以下參數:
  • 參數描述
    #name規定 cookie 的名稱。
    value規定 cookie 的值。
    expire規定 cookie 的有效期限。
    path規定 cookie 的伺服器路徑。
    domain規定 cookie 的網域名稱。
    secure規定是否透過安全的 HTTPS 連線來傳輸 cookie。
#