Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 如何防止Rails创建会话?_Session_Ruby On Rails 4_Activerecord_Devise - Fatal编程技术网

Session 如何防止Rails创建会话?

Session 如何防止Rails创建会话?,session,ruby-on-rails-4,activerecord,devise,Session,Ruby On Rails 4,Activerecord,Devise,我有一个Rails应用程序,我正在使用它在数据库中存储会话。我想阻止为未登录的用户创建会话,因为现在每个访问站点首页的爬虫都会获得一个在数据库中持久存在的会话 我的应用程序使用Rails 4.2.0、activerecord-session_store 0.1.1和Desive 3.5.2。会话创建由Rack处理,并提供一个删除会话的选项。我在我的应用程序控制器中编写了一个筛选方法,如果没有定义Desive的当前用户,则删除会话: after_filter :skip_session def

我有一个Rails应用程序,我正在使用它在数据库中存储会话。我想阻止为未登录的用户创建会话,因为现在每个访问站点首页的爬虫都会获得一个在数据库中持久存在的会话


我的应用程序使用Rails 4.2.0、activerecord-session_store 0.1.1和Desive 3.5.2。

会话创建由Rack处理,并提供一个删除会话的选项。我在我的
应用程序控制器
中编写了一个筛选方法,如果没有定义Desive的
当前用户
,则删除会话:

after_filter :skip_session

def skip_session
  unless current_user
    request.session_options = {drop: true}
  end
end
这将阻止会话创建1,但仍允许登录用户使用会话。这甚至允许用户登录(非常重要)-他们在没有会话的情况下访问登录页面,但在该筛选器运行之前提交表单designe set
current_user
,从而创建会话


1:实际上,会话是创建的,只是没有提交;在我的例子中,提交到DB,但如果使用Rails的默认cookie会话,这将阻止发送会话cookie。

会话创建由Rack处理,并提供一个删除会话的选项。我在我的
应用程序控制器
中编写了一个筛选方法,如果没有定义Desive的
当前用户
,则删除会话:

after_filter :skip_session

def skip_session
  unless current_user
    request.session_options = {drop: true}
  end
end
这将阻止会话创建1,但仍允许登录用户使用会话。这甚至允许用户登录(非常重要)-他们在没有会话的情况下访问登录页面,但在该筛选器运行之前提交表单designe set
current_user
,从而创建会话

1:实际上,会话是创建的,只是没有提交;在我的例子中,提交到DB,但是如果使用Rails的默认cookie会话,这将阻止发送会话cookie。

在Rails 5.2.0中使用:

request.session_options[:skip] = true
提交登录或注册表单时可能会导致
ActionController::InvalidAuthenticityToken
错误。验证
中的真实性令牌以防止伪造似乎依赖于会话。快速修复:在控制器中禁用(例如SessionsController):

要使注销生效,请执行以下操作:

skip_after_action :skip_session, only: [:destroy]
在Rails 5.2.0中,使用:

request.session_options[:skip] = true
提交登录或注册表单时可能会导致
ActionController::InvalidAuthenticityToken
错误。验证
中的真实性令牌以防止伪造似乎依赖于会话。快速修复:在控制器中禁用(例如SessionsController):

要使注销生效,请执行以下操作:

skip_after_action :skip_session, only: [:destroy]