好的。解决了我的问题。与资产前缀有关。重现步骤:
创建一个新的 Rails 应用程序:
$ rails new sample --skip-active-record
在 Gemfile 中取消注释 therubyracer gem。这与问题无关,只是为了让我们可以运行应用程序。
生成新资源:
$ rails generate resource foo
向使用会话 ( app/controllers/foos_controller.rb
) 的控制器添加一些代码:
class FoosController < ApplicationController
def index
session[:foo] = 'bar'
render nothing: true
end
end
测试:
$ curl -s -D - http://127.0.0.1:3000/foos -o /dev/null | grep Set-Cookie
Set-Cookie: _sample_session=R1..; path=/; HttpOnly
更改资源的范围 ( config/routes.rb
):
Sample::Application.routes.draw do
scope '/bar' do
resources :foos
end
end
再次测试:
$ curl -s -D - http://127.0.0.1:3000/bar/foos -o /dev/null | grep Set-Cookie
Set-Cookie: _sample_session=Sk...; path=/; HttpOnly
更改资产前缀 ( config/application.rb
):
module Sample
class Application < Rails::Application
config.assets.prefix = '/bar'
end
end
再次测试。没有饼干:
$ curl -s -D - http://127.0.0.1:3000/bar/foos -o /dev/null | grep Set-Cookie
$
再次更改资产前缀:
module Sample
class Application < Rails::Application
config.assets.prefix = '/bar/assets'
end
end
再次测试:
$ curl -s -D - http://127.0.0.1:3000/bar/foos -o /dev/null | grep Set-Cookie
Set-Cookie: _sample_session=L3...; path=/; HttpOnly