在Ruby on Rails 4(欧盟立法)中强制禁用cookie,直到用户(重新)接受ToS

由于我在欧盟工作,我相信我制作的所有网站都必须遵守这个愚蠢的欧盟法规,禁止在未经用户同意的情况下使用cookie(并要求用户选择加入)。

我的意图是“全面矫枉过正”,并要求用户在用户发送“_#{app_name} _session”cookie时(重新)只有在用户点击后才接受(重新)接受服务条款[接受]在说ToS。

基本上,每当有人访问应用程序时,用户将被迫明确接受ToS或登录以便能够使用该应用程序/网站。

我怎样才能在Rails 4中实现这一点?

在PHP中,我只需要添加

if (session_status() != PHP_SESSION_ACTIVE){ header("Location: /terms-of-service"); } 

index.php的开头

然后我需要确保唯一的session_start()位于服务于/terms-of-service页面的文件中,并且项目中的其他任何地方都没有其他实例。

但是如何用Rails做到这一点?

您可以通过在ApplicationController创建before_filter来完成此操作:

 class ApplicationController < ActionController::Base before_filter :validate_toc! private def validate_toc! # check if guest user has not already accepted the toc from session redirect_to toc_path, alert: 'Please accept ToC to continue.' if sesion[:tos].nil? || !user_logged_in? end end 

注意: sesion[:tos]是用户接受ToS时设置值的位置。 应该在routes.rb中设置toc_path,例如:

 get '/path/to/toc' => 'pages#toc', :as => :toc 

我检查了@ User089247的答案并根据我的需要进行了修改

 before_action :session_check!, except: [:terms_of_service_path] private def session_check! redirect_to terms_of_service_path if !session.exists? end 

基本上,如果没有为浏览器会话打开会话,则用户将被迫接受ToS。 然后,ToS页面将创建会话,除非用户拒绝接受ToS。