我的配置代码
require 'sinatra' #set :environment,:production enable :sessions enable :logging set run: true case when production? set port: 8081 when development? require 'sinatra/reloader' require 'better_errors' use BetterErrors::Middleware BetterErrors.application_root = __dir__ end use Rack::Session::Cookie,key: 'N&wedhSDF',domain: "localhost",path: '/',expire_after: 14400,secret: '*&(^B234' get '/' do erb :hello end@H_502_3@它仍然显示警告:
SECURITY WARNING: No secret option provided to Rack::Session::Cookie. This poses a security threat. It is strongly recommended that you provide a secret to prevent exploits that may be possible from crafted cookies. This will not be supported in future versions of Rack,and future versions will even invalidate your existing user cookies.@H_502_3@但它不会在生产中出现
问题是,即使Rack :: Session :: Cookie已经设置,为什么它仍然显示警告?
解决方法
你正在使用两者
enable :sessions@H_502_3@哪个makes Sinatra setup cookie based sessions,和
use Rack::Session::Cookie,...@H_502_3@这也为您的应用程序添加了会话,因此您最终会在中间件堆栈中使用Rack :: Session :: Cookie的两个实例.
Sinatra包含的会话中间件正在产生警告.默认情况下,Sinatra doesn’t create a session secret when running in the development environment(至少在经典模式下,它适用于模块化应用),因此Rack在开发过程中会产生警告.
您只需要启用会话的两种方式之一,共同使用两种方法可能会导致它们以意想不到的方式进行交互.
为了避免警告,您可以使用session_secret选项为Sinatra会话显式设置一个秘密:
enable :sessions set :session_secret,'*&(^B234'@H_502_3@启用会话时,您还可以将选项哈希作为参数传递.而不是启用:会话,请执行以下操作:
set :sessions,secret: '*&(^B234'@H_502_3@