Definir cookies em trilhos com opção de domínio
-
20-09-2019 - |
Pergunta
Estou tentando definir um cookie em um domínio e acessá -lo de outro. Isso é possível?
Aqui está o que estou fazendo no meu aplicativo:
Em um controlador, a ação de teste é acessada através deste URL:
def test
cookies[:foo] = {
:value => 'something',
:domain => 'myapp.heroku.com'
}
end
No mesmo controlador, a ação do TEST2 é acessada através deste URL:
http://myapp.heroku.com/account/test2
def test2
puts "foo=#{cookies[:foo]}"
end
Mas o valor dos cookies [: foo] está sempre em branco. É possível acessar o cookie no domínio Heroku.com. Eu pensei que definir a opção: Domínio permitiria isso.
Obrigado.
Solução
A opção: Domínio (e definir o domínio em cookies em geral) realmente funciona realmente em subdomínios. ou seja, para app1.mysite.com e app2.mysite.com - você pode definir o domínio de cookie como .mysite.com e compartilhá -lo entre os subdomínios.
É assim que os cookies são projetados para funcionar. MyApp.com e myapp.heroku.com são domínios separados, não subdomínios, portanto, tentar definir o domínio dessa maneira não vai funcionar.
Existem algumas maneiras de alcançar verdadeiros cookies de domínio cruzado - mas eles são bastante envolvido.
Outras dicas
Você não pode fazer isso para um domínio diferente, mas pode fazê -lo para subdomínios. Por exemplo, um aplicativo em execução no domínio example.com
pode definir um biscoito para subdomain.example.com
mas não para exampleapp.com
.
Devo acrescentar, se fosse possível definir cookies para outros domínios arbitrários, haveria enormes problemas de segurança/privacidade.
Você pode definir os mesmos cookies para todos os seus domínios, fazendo o seguinte no ambiente.rb:
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:session_domain => '.mydomain.com']
Vejo aqui para a documentação.
Você pode querer conferir http://coderack.org/users/ahamid/middlewares/142-session-injector