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。 |