Ruby on rails Rails v2.3:会话和cookie之间的区别

Ruby on rails Rails v2.3:会话和cookie之间的区别,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我通过阅读在线指南学习Rails(适用于Railsv2.3)。指南很棒,但是我有一个困惑,那就是: 有一章介绍Rails的功能,另一章介绍Rails的功能。这个解释很容易分开理解,但当比较两者时,像我这样的读者看不到会话和cookie之间的显著差异。特别是在什么情况下应该使用会话,在什么情况下应该使用Cookies? 此外,在课程章节中,有一个CookieStore的概念,CookieStore和Cookies的区别是什么? 有人能给我解释一下这些吗 会话和cookie都能够在两个或多个请求之间

我通过阅读在线指南学习Rails(适用于Railsv2.3)。指南很棒,但是我有一个困惑,那就是:

有一章介绍Rails的功能,另一章介绍Rails的功能。这个解释很容易分开理解,但当比较两者时,像我这样的读者看不到会话和cookie之间的显著差异。特别是在什么情况下应该使用会话,在什么情况下应该使用Cookies?

此外,在课程章节中,有一个CookieStore的概念,CookieStore和Cookies的区别是什么?


有人能给我解释一下这些吗

会话和cookie都能够在两个或多个请求之间存储一些信息(例如:当前用户id),而这些请求(在http中)是无状态的

但是Session更多的是一个抽象概念,与特定时间处于特定状态的概念相关:它包含的信息可以存储在数据库、服务器端文件、redis散列文件或cookie中

Cookie总是小文本文件导航器必须在请求之间存储一些持久性数据。。。但是,在客户端拥有一些数据可能是不安全的,因此它通常是加密的。但这个概念确实可以与会话重叠


TL;DR:session是保存临时数据的抽象概念。Cookies是一种(常见的)方法。

对我来说,主要区别在于会话数据存储在服务器上,而Cookies存储在客户端(浏览器)

因此,您可以信任来自会话的数据。来自cookie的信息可能被操纵、窃取,因此不应依赖于关键用途(例如,为了正确访问)


第二点是Cookie的大小有限,并且只基于文本。您可以在会话中存储许多复杂对象(但要注意内存消耗),并且不必在每次请求时将它们传输到客户端然后再返回。

cookie是存储在浏览器中的一个小文本文件

会话是“正在使用”状态的概念,该状态可以有与其关联的数据。Rails使用Cookie跟踪会话,并允许您为相关数据选择不同的存储,并使用相同的
会话
界面访问它

CookieStore
表示所有会话信息都存储在cookie本身中。在适当的情况下,您可以选择使用各种其他存储,并且它仍然可以通过
会话
访问器方法使用

除了会话之外,您还可以设置其他Cookie以在用户浏览器上存储信息。它们与会话无关,可以单独设置、访问和删除

示例1,在会话中存储登录用户的购物车:

session[:embarassing_products] = ['ooh',
                                  'naughty',
                                  'lucky_im_using_activerecord_store',
                                  'only_the_session_id_is_in_the_cookie',
                                  'other_data_arent_in_the_browser']
购物车是为用户会话保留的。您可以将会话设置为在浏览器窗口关闭、用户注销或经过一定时间后结束

示例2,在cookie中记住浏览器对域的最后一个语言首选项:

cookie[:lang] = 'en-US'

此信息存储在cookie本身中。除非cookie过期或被(您或用户)删除,否则它将保留在浏览器中。

通常会话只会持续到用户关闭浏览器为止。这对于典型的登录很有用。然而,如果您需要在会话之间保留信息,则可以使用持续时间较长的cookie,例如,即使在重新启动浏览器后仍会保留的“记住我”标志。

这些基于cookie的会话存在于客户端,并且对其数据进行编码。