【问题标题】:Rails 3 session & cookie how to persist session id cookieRails 3会话和cookie如何持久化会话ID cookie
【发布时间】:2013-04-28 22:37:18
【问题描述】:

我正在开发一个基于 session_id 的简单购物车,即用于确定用户购物车中使用的 session_id 商品。

但当用户关闭浏览器然后再次打开时,会话 ID 已更改。他丢失了购物车中的所有物品。

我怀疑我可以通过在 cookie 中保存 会话 ID 来提供这样的功能。

我说的对吗?

我的问题是如何提供一种功能,让用户即使在关闭浏览器后也能获得他们的购物车物品?

【问题讨论】:

    标签: ruby-on-rails session cookies


    【解决方案1】:

    Rails 默认将会话存储在 cookie 中。你可以影响如果 cookie 在浏览器重启后仍然有效(见下文)。

    Cookie 不会在浏览器之间共享。曾经。

    如果您想使用 Opera 查看您刚刚在 Firefox 中创建的购物车,您需要通过某种方式对商店进行身份验证,例如使用用户名和密码。

    请参阅Rails 3 additional session configuration options (key, expires_after, secure),了解有关会话的所有配置选项的说明。

    你会想看看 :expire_after,例如

    :expire_after => 24.hours
    

    (在这里找到:Setting session timeout in Rails 3

    【讨论】:

    • 谢谢,很清楚。但我不适用于不同的浏览器。例如,我在 Firefox 中将一些商品添加到购物车,然后关闭 Firefox 并打开 Opera。不幸的是,在 Opera 中,我没有看到 Firefox 中添加的项目。
    【解决方案2】:
    cookies[:your_cookie] = {
        :value => "your_cookie_value",
        :expires => 100.years.from_now
    }
    

    更多详情,check it out

    【讨论】:

    • 所以..每次我的控制器更改进入会话的内容时,我都必须更新我的 cookie,或者自动进行?
    【解决方案3】:

    我建议阅读 Rails 指南:动作控制器概述 (http://guides.rubyonrails.org/action_controller_overview.html)。

    第 4 节和第 5 节涵盖会话和 Cookie,让您更深入地了解 了解如何使用它们,并将更容易应对未来的挑战。

    我还会查看 Ruby on Rails ActionDispatch::Cookies http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html)

    此资源中列出了您正在寻找的控制器代码示例。这是一个例子:

    # Sets a cookie that expires in 1 hour.
    cookies[:login] = { :value => "XJ-122", :expires => 1.hour.from_now }
    

    【讨论】:

    • 我很困惑。一方面,默认情况下,我在会话中保留的所有数据 (session[:some_key] = some_value) 也保留在用户端的 cookie 中。另一方面,Rails 提供了一种将数据存储在 cookie 中的方法,例如 cookie[:some_key] = some_value。如果我可以将数据存储在 session[] 中,为什么还要将数据存储在 cookie[] 中?
    • 一些 Rails 应用程序不使用会话,但它们仍可能希望在用户浏览器上存储一些信息,这就是存在 cookie 方法的原因。
    猜你喜欢
    • 2013-03-06
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多