[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