Ruby - CGI Cookie



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

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

工作原理?

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

Cookie 是五个变长字段的纯文本数据记录:

  • Expires - Cookie 将过期的时间。如果为空,则 Cookie 将在访问者退出浏览器时过期。

  • Domain - 您网站的域名。

  • Path - 设置 Cookie 的目录或网页的路径。如果您想从任何目录或页面检索 Cookie,则可以为空。

  • Secure - 如果此字段包含单词“secure”,则 Cookie 只能使用安全服务器检索。如果此字段为空,则不存在此类限制。

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

在 Ruby 中处理 Cookie

您可以创建一个命名 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 则为 True
ruby_web_applications.htm
广告
© . All rights reserved.