【Ruby学习笔记】20.Ruby CGI方法及CGI Cookie

前言

本章介绍Ruby的CGI方法和CGI Cookie。

Ruby CGI方法

以下为CGI类的方法列表:

序号 方法描述
1 CGI::new([ level=“query”])
创建 CGI 对象。query可以是以下值:
query: 没有 HTML 生成输出
html3: HTML3.2
html4: HTML4.0 Strict
html4Tr: HTML4.0 Transitional
html4Fr: HTML4.0 Frameset
2 CGI::escape( str)
使用 URL 编码来转义字符串
3 CGI::unescape( str)
对通过 escape() 编码的字符串进行解码。
4 CGI::escapeHTML( str)
编码 HTML 特殊字符, 包括: & < >。
5 CGI::unescapeHTML( str)
解码 HTML 特殊字符, 包括: & < >。
6 CGI::escapeElement( str[, element…])
在指定的 HTML 元素中编码 HTML 特殊字符。
7 CGI::unescapeElement( str, element[, element…])
在指定的 HTML 元素中解码 HTML 特殊字符。
8 CGI::parse( query)
解析查询字符串,并返回包含哈希的 键=》值 对。
9 CGI::pretty( string[, leader=" "])
返回整齐的HTML格式。 如果指定了 leader ,它将写入到每一行的开头。 leader 默认值为两个空格。
10 CGI::rfc1123_date( time)
根据 RFC-1123 来格式化时间 (例如, Tue, 2 Jun 2008 00:00:00 GMT)。

CGI 实例化方法
以下实例中我们将 CGI::new 的对象赋值给 c 变量,方法列表如下:

序号 方法描述
1 c[ name]
返回一个数组,包含了对应字段名为 name 的值。
2 c.checkbox( name[, value[, check=false]])
c.checkbox( options)
返回 HTML 字符串用于定义 checkbox 字段。标签的属性可以以一个哈希函数作为参数传递。
3 c.checkbox_group( name, value…)
c.checkbox_group( options)
>返回 HTML 字符串用于定义 checkbox 组。标签的属性可以以一个哈希函数作为参数传递。
4 c.file_field( name[, size=20[, max]])
c.file_field( options)
返回定义 file 字段的HTML字符串。
5 c.form([ method=“post”[, url]]) { …}
c.form( options)
返回定义 form 表单的HTML字符串。 如果指定了代码块,将作为表单内容输出。标签的属性可以以一个哈希函数作为参数传递。
6 c.cookies
返回 CGI::Cookie 对象,包含了cookie 中的键值对。
7 c.header([ header])
返回 CGI 头部的信息。如果 header 参数是哈希值,其键 - 值对,用于创建头部信息。
8 c.hidden( name[, value])
c.hidden( options)
返回定义一个隐藏字段的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
9 c.image_button( url[, name[, alt]])
c.image_button( options)
返回定义一个图像按钮的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
10 c.keys
返回一个数组,包含了表单的字段名。
11 c.key?( name)
c.has_key?( name)
c.include?( name)
如果表单包含了指定的字段名返回 true。
12 c.multipart_form([ url[, encode]]) { …}
c.multipart_form( options) { …}
返回定义一个多媒体表单(multipart)的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
13 c.out([ header]) { …}
生成 HTML 并输出。使用由块的输出来创建页面的主体生成的字符串。
14 c.params
返回包含表单字段名称和值的哈希值。
15 c.params= hash
设置使用字段名和值。
16 c.password_field( name[, value[, size=40[, max]]])
c.password_field( options)
返回定义一个password字段的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
17 c.popup_menu( name, value…)
c.popup_menu( options)
c.scrolling_list( name, value…)
c.scrolling_list( options)
返回定义一个弹出式菜单的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
18 c.radio_button( name[, value[, checked=false]])
c.radio_button( options)
返回定义一个radio字段的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
19 c.radio_group( name, value…)
c.radio_group( options)
返回定义一个radio按钮组的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
20 c.reset( name[, value])
c.reset( options)
返回定义一个reset按钮的HTML字符串。 标签的属性可以以一个哈希函数作为参数传递
21 c.text_field( name[, value[, size=40[, max]]])
c.text_field( options)
返回定义一个text字段的HTML字符串。标签的属性可以以一个哈希函数作为参数传递。
22 c.textarea( name[, cols=70[, rows=10]]) { …}
c.textarea( options) { …}
返回定义一个textarea字段的HTML字符串。 如果指定了块,代码块输出的字符串将作为 textarea 的内容。 标签的属性可以以一个哈希函数作为参数传递。

HTML 生成方法
你可以再 CGI 实例中使用相应的 HTML 标签名来创建 HTML 标签,实例如下:

实例

#!/usr/bin/ruby
 
require "cgi"
cgi = CGI.new("html4")
cgi.out{
   cgi.html{
      cgi.head{ "\n"+cgi.title{"This Is a Test"} } +
      cgi.body{ "\n"+
         cgi.form{"\n"+
            cgi.hr +
            cgi.h1 { "A Form: " } + "\n"+
            cgi.textarea("get_text") +"\n"+
            cgi.br +
            cgi.submit
         }
      }
   }
}

CGI 对象属性
你可以再 CGI 实例中使用以下属性:

属性 返回值
accept 可接受的 MIME 类型
accept_charset 可接受的字符集
accept_encoding 可接受的编码
accept_language 可接受的语言
auth_type 可接受的类型
raw_cookie Cookie 数据 (原字符串)
content_length 内容长度(Content length)
content_type 内容类型(Content type)
From Client e-mail 地址
gateway_interface CGI 版本
path_info 路径
path_translated 转换后的路径
Query_string 查询字符串
referer 之前访问网址
remote_addr 客户端主机地址(IP)
remote_host 客户端主机名
remote_ident 客户端名
remote_user 经过身份验证的用户
request_method 请求方法(GET, POST, 等。)
script_name 参数名
server_name 服务器名
server_port 服务器端口
server_protocol 服务器协议
server_software 服务器软件
user_agent 用户代理(User agent)

Ruby CGI Cookie

HTTP协议是无状态协议。但对于一个商业网站,它需要保持不同的页面间的会话信息。

如用户在网站注册过程中需要跳转页面,但又要保证之前填写的信息不丢失。

这种情况下 Cookie 很好的帮我们解决了问题。

Cookie 是如何工作的?
几乎所有的网站设计者在进行网站设计时都使用了Cookie,因为他们都想给浏览网站的用户提供一个更友好的、人文化的浏览环境,同时也能更加准确地收集访问者的信息。

写入和读取
Cookies集合是附属于Response对象及Request对象的数据集合,使用时需要在前面加上Response或Request。

用于给客户机发送Cookies的语法通常为:

当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。

如果用户要读取Cookies,则必须使用Request对象的Cookies集合,其使用方法是: 需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器才能与Server进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。

集合的属性

  • 1.Expires属性:此属性用来给Cookies设置一个期限,在期限内只要打开网页就可以调用被保存的Cookies,如果过了此期限Cookies就自动被删除。如:设定Cookies的有效期到2004年4月1日,到时将自动删除。如果一个Cookies没有设定有效期,则其生命周期从打开浏览器开始,到关闭浏览器结束,每次运行后生命周期将结束,下次运行将重新开始。
  • 2.Domain属性:这个属性定义了Cookies传送数据的唯一性。若只将某Cookies传送给_blank">搜狐主页时,则可使用如下代码:
  • 3.Path属性:定义了Cookies只发给指定的路径请求,如果Path属性没有被设置,则使用应用软件的默认路径。
  • 4.Secure属性:指定Cookies能否被用户读取。
  • 5、Name=Value : Cookies是以键值对的形式进行设置和检索的。

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

CGI::Cookie对象实例化时包含以下参数:

参数 描述
name 规定 cookie 的名称。
value 规定 cookie 的值。
expire 规定 cookie 的有效期。
path 规定 cookie 的服务器路径。
domain 规定 cookie 的域名。
secure 规定是否通过安全的 HTTPS 连接来传输 cookie。

你可能感兴趣的:(Ruby学习笔记,ruby,学习,开发语言,后端,java)