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一种(常见的)方式.
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的大小有限,并且只是基于文本的.您可以在会话中存储许多复杂的对象(但要注意内存消耗),并且您不必将它们传输到客户端,然后在每个请求时返回.
归档时间: |
|
查看次数: |
5387 次 |
最近记录: |