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

Lee*_*eem 16 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在通过阅读在线指南(适用于Rails v2.3)学习Rails .指南很棒,然而,对我来说有一个混乱,那就是:

有一章解释了Rails 会话,另一章解释了Rails的Cookies.解释很容易理解,但比较两者时,像我这样的读者并没有看到Session和Cookies之间的显着差异.特别是在哪种情况下应该使用会话,在哪种情况下应该使用Cookie?

此外,在会话章节中,有一个CookieStore的概念,那么CookieStore和Cookies之间有什么区别呢?

有人能解释一下这些吗?

cha*_*sto 24

Sessions&Cookies都能够在两个或多个请求之间存储一些信息(例如:current_user id),这些请求(在http中)是无状态的.

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

Cookie始终是导航器必须在请求之间存储一些持久数据的小文本文件...但是在客户端有一些数据可能是不安全的,这就是为什么它经常被加密.但是这个概念确实可以与会话重叠.

TL; DR:会话持有临时数据的抽象概念.Cookies一种(常见的)方式.


jim*_*orm 8

Cookie是存储在浏览器中的小文本文件.

会话是"正在使用"状态的概念,该状态可以具有与之关联的数据.Rails跟踪与cookie的会话,并允许您为关联数据选择不同的存储并使用相同的session接口访问它.

CookieStore表示所有会话信息都存储在cookie本身内.您可以选择在适当的地方使用其他各种商店,并且仍然可以使用您的session存取方法.

除会话外,您还可以设置其他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']
Run Code Online (Sandbox Code Playgroud)

为用户的会话保留购物车.您可以将会话设置为在浏览器窗口关闭,用户注销或经过一定时间后结束.

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

cookie[:lang] = 'en-US'
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

因此,您可以信任会话中的数据.来自cookie的信息可以被操纵,被盗,因此不应该依赖于关键用途(例如,用于正确访问).

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

  • 这些基于 cookie 的会话存在于客户端并且它们的数据被编码。 (2认同)