Ruby - CGI Cookies

HTTP 协议是一种无状态协议。 但是对于商业网站来说,需要维护不同页面之间的会话信息。 例如,一个用户注册在完成许多页面后结束。 但是如何跨所有网页维护用户的会话信息。

在许多情况下,使用 Cookie 是记住和跟踪偏好、购买、佣金和其他更好的访问者体验或网站统计数据所需的信息的最有效方法。


它是如何工作的?

您的服务器以 cookie 的形式向访问者的浏览器发送一些数据。 浏览器可以接受 cookie。 如果是这样,它将作为纯文本记录存储在访问者的硬盘上。 现在,当访问者到达您网站上的另一个页面时,cookie 就可以检索了。 一旦检索到,您的服务器就会知道/记住存储的内容。

Cookie 是由五个可变长度字段组成的纯文本数据记录 −

  • Expires − cookie 过期的日期。 如果此项为空,则 cookie 将在访问者退出浏览器时过期。

  • Domain − 您网站的域名。

  • Path − 设置 cookie 的目录或网页的路径。 如果您想从任何目录或页面检索 cookie,这可能是空白的。

  • Secure − 如果此字段包含"secure"一词,则只能使用安全服务器检索 cookie。 如果此字段为空,则不存在此类限制。

  • Name = Value − Cookie 以键值对的形式设置和检索。


在 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

Cookie 使用 CGI::Cookie 类的单独对象表示,包含以下访问器 −

属性 返回值
name Cookie 名称
value 一组 cookie 值
path cookie 的路径
domain 域名
expires 过期时间(作为 Time 对象)
secure 如果安全 cookie 则为真

❮ Ruby Web 应用程序 - CGI 编程