Ruby CGI Cookies
HTTP協議是無狀態協議。但對於一個商業網站,它需要不同的頁麵之間維護會話信息。例如一個用戶注冊結束後完成了,需要訪問許多的頁麵。但如何在所有網頁保持用戶的會話信息。
在許多情況下,使用Cookie記憶和跟蹤喜好,購買,傭金和其他需要更好的訪問者的體驗或網站統計信息是最有效的方法。
如何工作
服務器發送一些數據到訪問者的瀏覽器以cookie的形式。瀏覽器可以接受的cookie,它是存儲在訪問者的硬盤驅動器作為一個普通的文字記錄。當訪問者來到網站的另一個頁麵上,Cookie是可用於檢索。一旦服務器認識/記住檢索到存儲。
Cookies是一個純文本數據記錄5個可變長度字段:
-
Expires : cookie將到期的日期。如果這是空白的,當訪問者退出瀏覽器時,cookie將到期。
-
Domain : 網站域名
-
Path : 目錄或網頁設置cookie的路徑。這可能是空白的,如果想從任何目錄或頁麵檢索cookie。
-
Secure : 如果此字段包含單詞“secure”的cookie可能隻能與一個安全的服務器中檢索。如果這一領域的空白,不存在此類限製。
-
Name=Value : Cookies是設置鍵和值對的形式審閱。
Ruby處理Cookie
可以創建一個名為cookie的對象並將其存儲在它的文本信息。要發送到瀏覽器,設置一個cookie頭調用CGI.out。
#!/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
Cookies是使用一個單獨的對象類CGI::Cookie,包含以下存取器表示:
屬性 | 返回值 |
---|---|
name | Cookie name |
value | An array of cookie values |
path | The cookie's path |
domain | The domain |
expires | The expiration time (as a Time object) |
secure | True if secure cookie |