【问题标题】:Rails - expire_after on session_store does not allow session to be changedRails - session_store 上的 expire_after 不允许更改会话
【发布时间】:2014-03-22 05:12:14
【问题描述】:

我的网站是一个与 rails api 交互的单页 rails 应用程序。我最近添加了一个 api 端点,允许用户通过 ajax 注销。

class Api::SessionsController < Api::ApplicationController
  ...      

  # DELETE /api/sessions/destroy
  def destroy
    session.delete(:user_id)
    render json: { success: true }
  end

  ...
end

在我更改会话存储以在用户退出浏览器时保留会话之前,此端点工作正常。

config/initializers/session_store.rb差异:

AppName::Application.config.session_store :cookie_store,
-  key: session_key, domain: TOP_LEVEL_DOMAIN
+  key: session_key, domain: TOP_LEVEL_DOMAIN, expire_after: 1.month

现在,在通过 ajax 访问我的 sessions#destroy 端点后,重新加载页面会重新登录用户,并且会话中仍然有 user_id。

我的猜测是浏览器的 cookie 没有被 DELETE ajax 请求覆盖(就像我添加 expire_after 参数之前一样),但这很难验证,因为存储的 cookie 是加密的。

有没有人有解决思路或调试路径?

有人知道这里发生了什么吗?

【问题讨论】:

    标签: ruby-on-rails ajax session cookies


    【解决方案1】:

    当您设置:expire_after 来设置cookie 的过期时间时,即使浏览器关闭,它也会导致cookie 持续到给定的日期。这意味着当您在 Rails 会话中更改某些内容时,您必须更新 cookie。实现这一目标的最简单方法是重新创建 cookie。

    【讨论】:

    • 我不确定我是否理解您的建议。您是说我应该在响应后更新客户端的烹饪?当会话发生变化时,默认的 rails 不应该处理更新 cookie 吗?
    • 没错。这篇文章解释得更好augustl.com/blog/2010/…
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2012-06-05
    • 2017-03-13
    • 2014-11-18
    • 2014-09-01
    • 1970-01-01
    • 2014-08-03
    • 2013-12-05
    相关资源
    最近更新 更多