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 |