Pergunta

Quero compartilhar o cookie de sessão entre domínios.

Tenho mais de um domínio:-

1. mydomain.com
2. mydomain.fr
3. mydomain.de
4. mydomain.da
...and many other language based

Agora, tenho um único site implantado em um servidor. Quero compartilhar a sessão entre os diferentes domínios de um único site.Como faço para conseguir isso?

eu encontrei na web <httpCookies domain=".mydomain.com" /> mas funciona com subdomínios (como test.mydomain.com e secure.mydomain.com), mas não para os diferentes domínios.

Eu também tentei <httpCookies domain=".mydomain." /> mas nesta sessão parou de funcionar.

Alguem poderia me ajudar por favor?

Foi útil?

Solução

Você não pode compartilhar cookies em domínios que tenham diferentes domínio de nível superior nome.

Isso só é possível fazer com subdomínios.

mydomain.com
fr.mydomain.com
de.mydomain.com
da.mydomain.com
...

Outras dicas

Você não pode compartilhar um cookie diretamente entre domínios diferentes.Mas há uma maneira de tornar isso possível em algum contexto.Você pode fazer uma solicitação JSONP ou carregar um iframe em seu JS.se você usar iframe, faça uma chamada http POST usando o formulário.A tag de formulário tem outro nome de domínio como ação e nome de iframe como destino.O que o formulário fará é carregar um ifram e o cookie do seu domínio diferente virá no seu navegador.

Código:

<iframe name="iframe-test" border="1px"></iframe>

<form id="iframe-form" target="iframe-test" action="http://differentdomain.com/setCookie" method="POST">
     <input type="hidden" value="1234" name="token">
   </form>

    <script type="text/javascript">
        function submitForm(){          
            var form = document.getElementById("iframe-form");
            form.submit();              
        }
    </script>

Como afirma Oded, você não pode compartilhar cookies entre diferentes domínios de nível superior.Portanto, você pode precisar procurar um método diferente para persistir sessões.

Trocar o provedor de estado de sessão conforme proposto por danyolgiax não resolverá seu problema, pois a identificação da sessão ainda está acontecendo com os cookies.Portanto, você precisa considerar uma abordagem como sessões sem cookies:

Sessões de cookies

Então você pode optar por armazenar os dados em um banco de dados ou sessão InProc no servidor.Depois de remover a dependência de cookies.

Editar

Além disso, se você realizar alguma atividade do lado do cliente usando um cookie não autenticado que exija absolutamente a presença dos cookies, você os gravaria em cada domínio diferente com base nesses valores armazenados no servidor/sessão.Portanto, os domínios de troca de usuário eventualmente recebem seu cookie para cada domínio.

Se você estiver usando o SQL Server, acho que pode usá-lo como provedor de estado de sessão.

em web.config:

<sessionState 
        mode="SQLServer"
        sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
        cookieless="false" 
        timeout="20" 
/>

Aqui está um documento:

http://msdn.microsoft.com/en-us/library/ms178581.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top