HTTP協議是無狀態協議。但對于一個商業網站,它需要保持不同的頁面間的會話信息。
如用戶在網站注冊過程中需要跳轉頁面,但又要保證之前填寫的信息部丟失。
這種情況下 Cookie 很好的幫我們解決了問題。
Cookies集合是附屬于Response對象及Request對象的數據集合,使用時需要在前面加上Response或Request。
用于給客戶機發送Cookies的語法通常為:
當給不存在的Cookies集合設置時,就會在客戶機創建,如果該Cookies己存在,則會被代替。由于Cookies是作為HTTP傳輸的頭信息的一部分發給客戶機的,所以向客戶機發送Cookies的代碼一般放在發送給瀏覽器的HTML文件的標記之前。
如果用戶要讀取Cookies,則必須使用Request對象的Cookies集合,其使用方法是: 需要注意的是,只有在服務器未被下載任何數據給瀏覽器前,瀏覽器才能與Server進行Cookies集合的數據交換,一旦瀏覽器開始接收Server所下載的數據,Cookies的數據交換則停止,為了避免錯誤,要在程序和前面加上response.Buffer=True。
你可以創建一個名為 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。 |