我正在处理oauth 1.0(twitter和flickr)。网站在端口80工作,oauth服务器在端口8080工作
算法:
它使用sinatra + rack:session + rack :: session :: sequel + sqlite来存储会话。它在每个响应中发送Set-Cookie: rack.session=id
我正在使用两种类型的请求:带有jquery的crossdomain ajax和带有window.open的常规请求。我有一个很大的安全问题,将cookie传递给跨域ajax请求。
无论服务器的响应头包含
Access-Control-Allow-Headers:*
铬会引发安全错误:
拒绝设置不安全的标题“Cookie”
我想通过传递rack.session = id来发布数据并加载它来避免这个问题:
before "/twitter/connect.json" do
session = Rack::Session::something(params["rack.session"])
end
但我无法在文档中找到如何执行此操作
答案 0 :(得分:1)
Rack::Session::Abstract::ID
有一个名为cookie_only
allows the session id to be passed in via the params的选项。但是,defaults to true和大多数会话中间件实现don't bother to override it。
您最好的选择可能是将Rack::Session::Abstract::ID
修补为默认cookie_only
为假。
Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge! :cookie_only => false