Rails - session_store上的expire_after不允许更改会话

时间:2014-02-20 23:07:54

标签: ruby-on-rails ajax session cookies

我的网站是一个与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是加密的。 / p>

有没有人有任何解决方案或调试路径?

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

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