cookies

Cookie 允许web 应用程序从浏览器“会话”中得到类似哈希表的功能:你可以在客户端
浏览器上存储名字字符串,并在随后的请求中可按名字取回相应的值。
这太有意义了,因为HTTP,在浏览器和web 服务端之间使用的协议,是无状态的。Cookie
提供了用于克服这一限制的手段,以允许web 应用程序在两次请求间保留数据。
Rails 在背后为cookie 抽象出了一个方便的,简单的接口。“控制器”的属性cookie
是个类似于哈希表对象,它用cookie 名字和由浏览器发送给应用程序的值初始化自己。在任
何时候应用程序都可以添加新的key/value 键/值对给cookie 对象。当请求完成处理时,这些会被发送给浏览器。这些新值对应用程序的随后请求(服从下面描述的各种限制)将是有效的。
这儿有个简单的Rails“控制器”,它存储一个cookie 在用户的浏览器内,并重定向到
另一个“动作”。记住此重定向包括了一个round-trip 给浏览器,并且随后在应用程序内的调用将创建一个新的“控制器”对象。新的“动作”会恢复来自浏览器的cookie 值并显示它。
class CookiesController < ApplicationController
def action_one
cookies[:the_time] = Time.now.to_s
redirect_to :action => "action_two"
end
def action_two
cookie_value = cookies[:the_time]
render(:text => "The cookie says it is #{cookie_value}")
end
end
你必须将cookie 值做为字符串来传递—没有暗中的转换操作被完成。如果你传递其它类
型的话,你或许会得到包含在private 方法’gsub’调用的一个隐藏的错误提示。
浏览器用每个cookie 存储少量的选项集:(失效的日期和时间,相对于cookie 的路径,
和将要设置cookie 的域)。如果你通过赋值给cookie[name]来创建一个cookie 的话,你会得到这些选项的缺省集:
cookie 将会应用于整个站点,它从不会过期,它将应用于主机设置的整个范围。只是,这些选项应通过传递哈希表中的值来覆写,而不是用单个的字符串。
(在这个例子中,我们使用groovy#days.from_now 来扩展Fixnum)
cookies[:marsupial] = {
:value => "wombat",
:expires => 30.days.from_now,
:path => "/store" }
有效选项是
:domain
:path
由于Cookie变量使用得非常广泛,各种不同的网站都在客户端的机器上写下了各式各样的Cookie变量和它们的值。但是Cookie变量只能定义和赋值,而不能追加,若名称相同,则会将原有的数据覆盖。
如何保证不同网站的Cookie不会互相冲突及同一个网站内的Cookie不会互相冲突。解决这两个问题的方法是使用Cookie变量的domain属性和path属性。Domain属性用来设置所定义的Cookie变量的域,设置不同变量的域可以防止不同网站之间的Cookie相互冲突;path属性用来设置所定义的Cookie变量的文件路径。此路径是相对于服务器的根目录而言。一般一个网站的不同开发组会使用不同的文件路径,这样就可以避免Cookie的互相冲突。
(例!)
Response.Cookies("Customer").Domain="http://www.xxx.com"
Response.Cookies("Customer").path="/wwwroot/hrm"

:expires
通过设置Cookie变量的Expires属性来设置它的生命期限。如果在一次客户访问结束以后,所设置的Cookie变量依然留在客户端机上面并且有效,那么必须设置Cookie变量的Expires属性值,如果没有给出失效时间,cookie 会持久保存。如果给个空字符串,这样浏览器应该在内存中存储它并在浏览器“会话”结束后删除它。

:secure
Secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
:value
cookies的值

使用cookie 的问题是有些用户并不喜欢它们,并且关闭浏览器对它们的支持。你需要规
则你的应用程序对丢失cookie 的处理。(它不需要整个功能;它只需要应付丢失的数据。)
Cookie 可很好地用于存储小的字符串在用户的浏览器内,但是对大型的结构化数据却无
能为力。对于这一点,你就需要“会话”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值