[Cascavel-pm] Cookies

Luis Motta Campos monsieur_champs em yahoo.com.br
Sexta Abril 21 11:21:36 PDT 2006


Thomas Britis wrote:
> Olá Luis,
>     Muito obrigado pela resposta.

   Sem problemas.

>     O grande problema é que já tenho todo o sistema desenvolvido e 
> difundido com o uso de Cookies. Uma alteração nessa altura do campeonato 
> me criaria um grande desconforto.

   Compreendo.
   Aparentemente, teu sistema precisa de uma revisão de projeto. ;-) Ele 
deveria ser um pouco mais modular. Mas isso é outra história.

>     Eu não consegui entender a lógica do Cookie, pois eu pensava que o 
> Cookie lido seria sempre o domínio onde estivesse hospedado o CGI, 
> porém, pelo que parece, ocorre a leitura do domínio de onde o cgi é 
> chamado e, não bastasse isso, eu não consigo setar o Cookie dessa forma.

   Não entendi nada do que você disse. O importante sobre cookies e 
domínios é o seguinte: quando você setar um cookie a partir de um 
domínio, tem de declarar o domínio no cookie. Se o browser achar que o 
teu domínio real é diferente do domínio que você está sentando no 
cookie, pode rejeitar o danado. Isso quer dizer que você apenas pode 
setar cookies para o seu próprio domínio.
   Da mesma forma, o browser apenas vai enviar cookies que estejam 
declarados como pertencentes ao teu domínio. Desta forma, quando um site 
  "w.x.y.com.br" seta um cookie, apenas ele vai ver. Mas se o cookie for 
setado para "x.y.com.br", então "w.x.y.com.br" e "x.y.com.br" vão poder 
ver o cookie, mas não "y.com.br". Espero que você tenha entendido.

>     Eu queria achar uma forma de setar o cookie no domínio de onde vem a 
> requisição ou ainda, ler o cookie do domínio da requisição. É exatamente 
> o problema que tenho.

   Como você pode ver, tanto pela minha explicação acima, ou pela RFC, 
isso não é possível, por se tratar de uma enorme brecha de segurança.

   O que se pode fazer no seu caso é uma coisa meio esquisita, mas 
funcional: quando fizer a requisição para o site fora do seu domínio, 
serialize a chave de sessão, e a armazene como parâmetro POST. Depois, 
quando estiver no site "y.com.br" (usando seus nomes de domínio, logo 
abaixo), volte a transformar a sessão num cookie, e envie o novo cookie 
(agora para o domínio "y.com.br" para o browser)

   Espero que isto tenha ficado claro.
   Se você tiver problemas, pode postar para a lista. Eu estou 
acompanhando seu caso. ;-) mas as outras pessoas tem o direito de saber 
como resolver problemas comuns.

>     Vou dar uma estudada na rfc que me passou, porém, se tiver alguma 
> dica, qualquer coisa, ficarei eternamente grato :)

   A RFC é chata, mas pode ser bem educativa.
   Boa leitura.
   Putamplexos!

> Luis Motta Campos wrote:
> 
>> Thomas Britis wrote:
>>
>>> Senhores,
>>>
>>>     Tenho um pequeno problema e preciso da ajuda de vocês.
>>>
>>>     Tenho alguns CGI em perl que requerem um cookie setado para 
>>> validar a sessão (por meio de um form de login). Até aí tudo bem.
>>>
>>>     Acontece que preciso utilizar esses cgi's em páginas distintas, 
>>> porém, sempre chamando do mesmo local, ou seja:
>>>     Os CGI's estarão sempre em: www.x.com.br/cgi-bin/cgi.pl
>>>     Após o login, o usuário é redirecionado para uma página em html 
>>> que pode estar em qualquer outro domínio e, essa página abre um frame 
>>> chamando o cgi do domínio x.com.br.
>>>
>>>     O problema é que: quando o cgi (www.x.com.br/cgi-bin/cgi.pl) é 
>>> chamado de outro domínio (por ex: www.y.com.br), quando tento ler o 
>>> cookie é como se não houvesse nada setado (creio eu que o perl tenta 
>>> ler os cookies do domínio y.com.br e não do x.com.br como deveria) e 
>>> a sessão é invalidada.
>>>
>>>     Tentei então setar o cookie no login do domínio de onde vem o 
>>> login (e não onde está o cgi), porém, sem sucesso. Acho que o 
>>> navegador não deixa eu setar um cookie de um domínio alheio.
>>>
>>>     Alguem já passou por situação parecida ou tem alguma luz ?
>>
>>
>>
>>    Eu tenho alguma experiência com cookies, mas acho que não vai 
>> conseguir isso usando cookies para validar sessões.
>>    Cookies tem limitações de especificação muito limitantes, por 
>> questões de segurança, com relação a que websites podem recuperar as 
>> informações.
>>
>>    Não sei se isso é possível, mas acho que o melhor conselho que eu 
>> posso te dar agora é: tente mudar seu sistema de passagem de 
>> informações de sessão para usar sessões Server-Side (isto é, armazene 
>> apenas um identificador de sessão no browser) e tente não usar 
>> cookies: ao invés disso, use um parâmetro GET ou um HTML HIDDEN INPUT 
>> (tag /input/, tipo /hidden/) para armazenar esta chave de sessão.
>>
>>    Se isso não for possível, eu recomendo fortemente a leitura e 
>> compreensão da RFC 2109, "HTTP State Management Mechanism", a 
>> especificação oficial de HTTP Cookies. Por se tratar de uma 
>> funcionalidade bem antiga, a maior parte dos browsers já a implementa 
>> consistentemente.
>>
>>    http://www.ietf.org/rfc/rfc2109.txt
>>
>>    Espero que isso ajude.
>>    Se precisar, posso tentar ajudar a estudar e descobrir uma solução 
>> baseada em cookies. Mas isso vai custar algum tempo. Me contate 
>> off-list e conversamos.
>>
>>    Putamplexos!
> 
> 


-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  Luis Motta Campos is Software Engineer, Oracle OCP/DBA, Un*x
  Sysadmin, Member of {Lisbon,São Paulo,Cascavel,Brasil,London}
  Perl Mongers and Perl Fanatic Evangelist
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

		
_______________________________________________________ 
Novo Yahoo! Messenger com voz: Instale agora e faça ligações de graça. 
http://br.messenger.yahoo.com/


Mais detalhes sobre a lista de discussão Cascavel-pm