鍍金池/ 教程/ Ruby/ Ruby CGI Cookies
Ruby 方法
Ruby 語(yǔ)法
Ruby 注釋
Ruby 簡(jiǎn)介
Ruby 數(shù)據(jù)庫(kù)訪問(wèn) - DBI 教程
Ruby 安裝 - Unix
Ruby 數(shù)據(jù)類(lèi)型
Ruby 異常
Ruby 類(lèi)案例
Ruby 命令行選項(xiàng)
Ruby CGI Sessions
Ruby 類(lèi)和對(duì)象
Ruby 環(huán)境
Ruby 面向?qū)ο?/span>
Ruby 變量
Ruby Dir 類(lèi)和方法
Ruby CGI方法
Ruby 塊
Ruby JSON
Ruby File 類(lèi)和方法
Ruby 安裝 - Windows
Ruby 判斷
Ruby CGI編程
Ruby 發(fā)送郵件 – SMTP
Ruby XML, XSLT 和 XPath 教程
Ruby 迭代器
Ruby 數(shù)組
Ruby 模塊
Ruby 正則表達(dá)式
Ruby CGI Cookies
Ruby Web Services 應(yīng)用 - SOAP4R
Ruby 循環(huán)
Ruby 多線程
Ruby Socket 編程
Ruby 環(huán)境變量
Ruby 日期 & 時(shí)間
Ruby 范圍
Ruby 字符串
Ruby 哈希(Hash)
Ruby 運(yùn)算符
Ruby 文件的輸入與輸出

Ruby CGI Cookies

HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。但對(duì)于一個(gè)商業(yè)網(wǎng)站,它需要保持不同的頁(yè)面間的會(huì)話信息。

如用戶在網(wǎng)站注冊(cè)過(guò)程中需要跳轉(zhuǎn)頁(yè)面,但又要保證之前填寫(xiě)的信息部丟失。

這種情況下 Cookie 很好的幫我們解決了問(wèn)題。

Cookie 是如何工作的?

幾乎所有的網(wǎng)站設(shè)計(jì)者在進(jìn)行網(wǎng)站設(shè)計(jì)時(shí)都使用了Cookie,因?yàn)樗麄兌枷虢o瀏覽網(wǎng)站的用戶提供一個(gè)更友好的、人文化的瀏覽環(huán)境,同時(shí)也能更加準(zhǔn)確地收集訪問(wèn)者的信息。

寫(xiě)入和讀取

Cookies集合是附屬于Response對(duì)象及Request對(duì)象的數(shù)據(jù)集合,使用時(shí)需要在前面加上Response或Request。

用于給客戶機(jī)發(fā)送Cookies的語(yǔ)法通常為:

當(dāng)給不存在的Cookies集合設(shè)置時(shí),就會(huì)在客戶機(jī)創(chuàng)建,如果該Cookies己存在,則會(huì)被代替。由于Cookies是作為HTTP傳輸?shù)念^信息的一部分發(fā)給客戶機(jī)的,所以向客戶機(jī)發(fā)送Cookies的代碼一般放在發(fā)送給瀏覽器的HTML文件的標(biāo)記之前。

如果用戶要讀取Cookies,則必須使用Request對(duì)象的Cookies集合,其使用方法是: 需要注意的是,只有在服務(wù)器未被下載任何數(shù)據(jù)給瀏覽器前,瀏覽器才能與Server進(jìn)行Cookies集合的數(shù)據(jù)交換,一旦瀏覽器開(kāi)始接收Server所下載的數(shù)據(jù),Cookies的數(shù)據(jù)交換則停止,為了避免錯(cuò)誤,要在程序和前面加上response.Buffer=True。

集合的屬性

  • 1.Expires屬性:此屬性用來(lái)給Cookies設(shè)置一個(gè)期限,在期限內(nèi)只要打開(kāi)網(wǎng)頁(yè)就可以調(diào)用被保存的Cookies,如果過(guò)了此期限Cookies就自動(dòng)被刪除。如: 設(shè)定Cookies的有效期到2004年4月1日,到時(shí)將自動(dòng)刪除。如果一個(gè)Cookies沒(méi)有設(shè)定有效期,則其生命周期從打開(kāi)瀏覽器開(kāi)始,到關(guān)閉瀏覽器結(jié)束,每次運(yùn)行后生命周期將結(jié)束,下次運(yùn)行將重新開(kāi)始。
  • 2.Domain屬性:這個(gè)屬性定義了Cookies傳送數(shù)據(jù)的唯一性。若只將某Cookies傳送給_blank">搜狐主頁(yè)時(shí),則可使用如下代碼:
  • 3.Path屬性:定義了Cookies只發(fā)給指定的路徑請(qǐng)求,如果Path屬性沒(méi)有被設(shè)置,則使用應(yīng)用軟件的缺省路徑。
  • 4.Secure屬性:指定Cookies能否被用戶讀取。
  • 5、Name=Value : Cookies是以鍵值對(duì)的形式進(jìn)行設(shè)置和檢索的。
    • *

Ruby 中處理Cookies

你可以創(chuàng)建一個(gè)名為 cookie 的對(duì)象并存儲(chǔ)文本信息,將該信息發(fā)送至瀏覽器,調(diào)用 CGI.out 設(shè)置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

接下來(lái)我們回到這個(gè)頁(yè)面,并查找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對(duì)象實(shí)例化時(shí)包含以下參數(shù):

參數(shù) 描述
name 規(guī)定 cookie 的名稱(chēng)。
value 規(guī)定 cookie 的值。
expire 規(guī)定 cookie 的有效期。
path 規(guī)定 cookie 的服務(wù)器路徑。
domain 規(guī)定 cookie 的域名。
secure 規(guī)定是否通過(guò)安全的 HTTPS 連接來(lái)傳輸 cookie。