cookies - with - setcookie url




Cookies no host local com domínio explícito (12)

Eu devo estar perdendo alguma coisa básica sobre cookies. No host local, quando eu configuro um cookie no lado do servidor e especifico o domínio explicitamente como localhost (ou .localhost). o cookie não parece ser aceito por alguns navegadores.

Firefox 3.5: verifiquei a solicitação HTTP no Firebug. O que eu vejo é:

Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

ou (quando eu definir o domínio para .localhost):

Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

Em ambos os casos, o cookie não é armazenado.

IE8: Eu não usei nenhuma ferramenta extra, mas o cookie não parece ser armazenado também, porque não está sendo enviado de volta em solicitações subsequentes.

Opera 9.64: Tanto localhost quanto .localhost funcionam , mas quando eu verifico a lista de cookies em Preferences, o domínio é definido como localhost.local, mesmo que esteja listado em localhost (no agrupamento de listas).

Safari 4: Ambos localhost e .localhost funcionam , mas eles são sempre listados como .localhost em Preferências. Por outro lado, um cookie sem um domínio explícito, sendo mostrado apenas como localhost (sem ponto).

Qual é o problema com o host local? Devido a um número tão grande de inconsistências, deve haver algumas regras especiais envolvendo o host local. Além disso, não está completamente claro para mim por que os domínios devem ser prefixados por um ponto? RFC 2109 afirma explicitamente que:

O valor para o atributo Domínio não contém pontos incorporados ou não inicia com um ponto.

Por quê? O documento indica que tem que fazer algo com segurança. Eu tenho que admitir que eu não li toda a especificação (pode fazê-lo mais tarde), mas soa um pouco estranho. Com base nisso, definir cookies no localhost seria impossível.


Concordo amplamente com @Ralph Buchfelder, mas aqui está uma amplificação disso, por experiência ao tentar replicar um sistema com vários subdomínios (como example.com, fr.example.com, de.example.com) na minha máquina local ( OS X / Apache / Chrome | Firefox).

Eu editei / etc / hosts para apontar alguns subdomínios imaginários em 127.0.0.1:

127.0.0.1 localexample.com
127.0.0.1 fr.localexample.com
127.0.0.1 de.localexample.com

Se eu estiver trabalhando em fr.localexample.com e deixar o parâmetro de domínio fora, o cookie será armazenado corretamente para fr.localexample.com, mas não ficará visível nos outros subdomínios.

Se eu usar um domínio de ".localexample.com", o cookie será armazenado corretamente para fr.localexample.com e ficará visível em outros subdomínios.

Se eu usar um domínio de "localexample.com", ou quando eu estivesse tentando um domínio de apenas "localexample" ou "localhost", o cookie não estava sendo armazenado.

Se eu usar um domínio de "fr.localexample.com" ou ".fr.localexample.com", o cookie será armazenado corretamente para fr.localexample.com e ficará (corretamente) invisível em outros subdomínios.

Portanto, o requisito de que você precisa de pelo menos dois pontos no domínio parece estar correto, mesmo que eu não consiga ver por que deveria estar.

Se alguém quiser experimentar isso, aqui está um código útil:

<html>
<head>
<title>
Testing cookies
</title>
</head>
<body>
<?php
header('HTTP/1.0 200');
$domain = 'fr.localexample.com';    // Change this to the domain you want to test.
if (!empty($_GET['v'])) {
    $val = $_GET['v'];
    print "Setting cookie to $val<br/>";
    setcookie("mycookie", $val, time() + 48 * 3600, '/', $domain);
}
print "<pre>";
print "Cookie:<br/>";
var_dump($_COOKIE);
print "Server:<br/>";
var_dump($_SERVER);
print "</pre>";
?>
</body>
</html>

Eu estava brincando um pouco.

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=localhost; Path=/

funciona no Firefox e Chrome a partir de hoje. No entanto, não encontrei uma maneira de fazê-lo funcionar com o curl. Eu tentei Host-Header e - resolver, sem sorte, qualquer ajuda apreciada.

No entanto, funciona em curvas, se eu configurá-lo para

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=127.0.0.1; Path=/

em vez de. (Que não funciona com o Firefox.)


Eu tive o mesmo problema e consertei colocando 2 pontos no próprio nome do cookie sem especificar nenhum domínio.

set-cookie: name.s1.s2=value; path=/; expires=Sun, 12 Aug 2018 14:28:43 GMT; HttpOnly


Nenhuma das respostas aqui funcionou para mim. Eu consertei colocando meu PHP como a primeira coisa na página.

Como outros cabeçalhos, os cookies devem ser enviados antes de qualquer saída do seu script (esta é uma restrição do protocolo). Isso requer que você faça chamadas para essa função antes de qualquer saída, incluindo tags e espaços em branco.

De http://php.net/manual/en/function.setcookie.php


Outro detalhe importante, o expires = deve usar o seguinte formato de data e hora: Wdy, DD-Mon-AAAA HH: MM: SS GMT ( RFC6265 - Seção 4.1.1 ).

Set-Cookie:
  name=value;
  domain=localhost;
  expires=Thu, 16-07-2019 21:25:05 GMT;
  path=/

Passei uma grande parte do tempo resolvendo esse problema sozinho.

Usando PHP, e nada nesta página funcionou para mim. Eu finalmente percebi no meu código que o parâmetro 'secure' para o session_set_cookie_params () do PHP estava sempre sendo configurado para TRUE.

Como não estava visitando o host local com https, meu navegador nunca aceitaria o cookie. Então, modifiquei essa parte do meu código para definir condicionalmente o parâmetro 'secure' baseado em $ _SERVER ['HTTP_HOST'] sendo 'localhost' ou não. Trabalhando bem agora.

Espero que isso ajude alguém.


Por design, os nomes de domínio devem ter pelo menos dois pontos; caso contrário, o navegador os considerará inválidos. (Veja referência em http://curl.haxx.se/rfc/cookie_spec.html )

Ao trabalhar no localhost , o domínio do cookie deve ser totalmente omitido. Basta configurá-lo para "" ou NULL ou FALSE vez de "localhost" não é suficiente.

Para PHP, veja os comentários em http://php.net/manual/en/function.setcookie.php#73107 .

Se estiver trabalhando com a API do Java Servlet, não chame o cookie.setDomain("...") .


Resultados eu tinha variado pelo navegador.

O Chrome-127.0.0.1 funcionou, mas o localhost .localhost e "" não o fizeram. O Firefox-. Localhost funcionou, mas o localhost, 127.0.0.1 e "" não o fizeram.

Não testei no Opera, IE ou Safari


Se você estiver configurando um cookie de outro domínio (ou seja, configurando o cookie fazendo uma solicitação de origem cruzada XHR), será necessário configurar o atributo withCredentials como true no XMLHttpRequest usado para buscar o cookie conforme descrito here


você pode fazer uso de localhost.org ou melhor .localhost.org ele sempre será resolvido para 127.0.0.1


localhost: Você pode usar: domain: ".app.localhost" e funcionará. O parâmetro 'domain' precisa de 1 ou mais pontos no nome do domínio para definir cookies. Em seguida, você pode ter sessões trabalhando em subdomínios de host local, como: api.app.localhost:3000 .





setcookie