# Ruby CGI Cookies
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屬性沒有被設置,則使用應用軟件的缺省路徑。
* **4.Secure屬性:**指定Cookies能否被用戶讀取。
* **5、Name=Value :** Cookies是以鍵值對的形式進行設置和檢索的。
## 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。 |
- Ruby 基礎
- Ruby 簡介
- Ruby 環境
- Ruby 安裝 - Unix
- Ruby 安裝 - Windows
- Ruby 命令行選項
- Ruby 環境變量
- Ruby 語法
- Ruby 數據類型
- Ruby 類和對象
- Ruby 類案例
- Ruby 變量
- Ruby 運算符
- Ruby 注釋
- Ruby 判斷
- Ruby 循環
- Ruby 方法
- Ruby 塊
- Ruby 模塊(Module)
- Ruby 字符串(String)
- Ruby 數組(Array)
- Ruby 哈希(Hash)
- Ruby 日期 & 時間(Date & Time)
- Ruby 范圍(Range)
- Ruby 迭代器
- Ruby 文件的輸入與輸出
- Ruby File 類和方法
- Ruby Dir 類和方法
- Ruby 異常
- Ruby 高級
- Ruby 面向對象
- Ruby 正則表達式
- Ruby 數據庫訪問 - DBI 教程
- Ruby CGI 編程
- Ruby CGI方法
- Ruby CGI Cookies
- Ruby CGI Sessions
- Ruby 發送郵件 - SMATP
- Ruby Socket 編程
- Ruby XML, XSLT 和 XPath 教程
- Ruby Web Services 應用 - SOAP4R
- Ruby 多線程
- 免責聲明