Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BRG

Problema com cookies!

Recommended Posts

Estou com problema para recupera os cookies.

 

Para gerar estou usando isso:

$dados = array();
$dados["usuario"] = $m_USER;
$dados["senha"] = $m_PW;					
if(isset($_POST["cookie"])){			
  setcookie("dados", serialize($dados), time()+60*60*24*365);			
}

Para resgatar estou usando isso:

unserialize($_COOKIE["dados"]);

Mais não está dando certo.

Ja tentei unserialize(stripslashes($_COOKIE["dados"]) e tabm não deu.
Alguem tem alguma ideia?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

O que está acontecendo ?

 

Aparece alguma mensagem de erro ?

 

Os dados não estão vindo como deveriam ?

 

Tente gravar com base64_encode:

$dados = array();
$dados["usuario"] = $m_USER;
$dados["senha"] = $m_PW;
if(isset($_POST["cookie"])){
setcookie("dados", base64_encode( serialize($dados) ), time()+60*60*24*365);
}

 

E resgatar com base64_decode:

unserialize(base64_decode( $_COOKIE["dados"]) );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explica melhor o que nao esta dando certo?

tem conteudo no cookie o que mostra? ou o cookie fica vazio?

 

 

O cookie fica vazio!

 

 

Amigo,

 

O que está acontecendo ?

 

Aparece alguma mensagem de erro ?

 

Os dados não estão vindo como deveriam ?

 

Tente gravar com base64_encode:

$dados = array();
$dados["usuario"] = $m_USER;
$dados["senha"] = $m_PW;
if(isset($_POST["cookie"])){
setcookie("dados", base64_encode( serialize($dados) ), time()+60*60*24*365);
}

 

E resgatar com base64_decode:

unserialize(base64_decode( $_COOKIE["dados"]) );

 

Tentei e não funcionou.

Estou usando em uma INTRANET (Sistema interno). Ai logo via LDAP, se o usuario e a senha for verdadeira ele redireciona para uma pagina fora EXTRANET.

 

Tentei colocar assim:

Página intranet:

			$dados = array();
			$dados["usuario"] = $m_USER;
			$dados["senha"] = $m_PW;
			if(isset($_POST["cookie"])){
			 setcookie("dados", base64_encode( serialize($dados) ), time()+60*60*24*365);
			}

Ai na pagina Extranet

$dados = unserialize(base64_decode($_COOKIE["dados"]) );
echo $dados["usuario"];

Não retorna nada

 

Quando coloco

print_r($_COOKIE);

imprime

Array ( [__utma] => 265197582.1610061312.1260448395.1260452459.1260538916.3 [__utmz] => 265197582.1260448395.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) ) 

 

Alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa $dados antes de criar o cookie

 

e você esta testando se $_POST["cookie"] existe dai entao cria o cookie?

se $_POST["cookie"] nao existir então ele nao cria nada

 

 

error_reporting(E_ALL);
ini_set('display_errors', TRUE);

$dados = array();
$dados["usuario"] = $m_USER;
$dados["senha"] = $m_PW;
//print_r($dados);
//if(isset($_POST["cookie"])){
setcookie("dados", serialize($dados), time()+60*60*24*365);
//}

 

testa o print_r primeiro e veja se $dados tem conteudo

depois comenta o print_r e testa pra ver se ficou tudo certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O cookie fica vazio!

 

imprime

Array ( [__utma] => 265197582.1610061312.1260448395.1260452459.1260538916.3 [__utmz] => 265197582.1260448395.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) ) 

Humm, seu cookie não foi gravado.

 

Coloque o seguinte logo no início do seu código:

 

error_reporting( E_ALL | E_STRICT );

 

Acho que você está tentando enviar o cookie depois de já ter iniciado a saída com PHP, o cookie é um cabeçalho HTTP e DEVE ser enviado antes de qualquer outra coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabio, testei..

e apareceu isso

 

Array ( [usuario] => teste [senha] => teste)
Notice: unserialize() [function.unserialize]: Error at offset 0 of 33 bytes in D:\intranet\index.php on line 81

O codigo ficou assim;

 

$dados = array();
$dados["usuario"] = $m_USER;
$dados["senha"] = $m_PW;
setcookie("dados", serialize($dados), time()+60*60*24*365);

$dados = unserialize($_COOKIE["dados"]);
echo $dados["usuario"];

 

 

==============

 

Olha!

Agora assim.. quando eu jogo tudo na mesma pagina da certo.

 

Quando eu uso um header e tento pegar na Extranet (Página Externa) não rola..

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora assim.. quando eu jogo tudo na mesma pagina da certo.

 

Quando eu uso um header e tento pegar na Extranet (Página Externa) não rola..

 

Resolvido então ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não... porque assim,

 

Eu tenho que logar na página interna e mandar para página externa.

 

Quando eu mando para pagina interna e recupero na mesma página da certo.(COMO TESTE)

Agora quando eu logo na pagina interna e mando para a página externa (header("Location: http://....")), não aprece nada e o cookei fica daquele jeito:

Array ( [__utma] => 265197582.1610061312.1260448395.1260452459.1260538916.3 [__utmz] => 265197582.1260448395.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) )

Ta complicado...rs

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os domínios são iguais ou diferentes? Um cookie só estará disponível para o mesmo domínio, a não ser que você modifique o domínio dele na hora de criar o cookie.

http://br.php.net/manual/pt_BR/function.setcookie.php

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está setando errado o cookie. Veja

 

bool setcookie ( string $nome [, string $valor [, int $expira [, string $caminho [, string $domínio [, bool $seguro [, bool $somente http ]]]]]] )

Logo após o tempo de expiração, vai o caminho e só depois vai o domínio.

 

Todos os argumentos, excento o name , são opcionais. Você pode também colocar como argumento uma string vazia ("") para pular o argumento. Por que o argumento expire é um inteiro, ele não pode ser escapado com uma string vazia, por isso utilize um zero (0) no lugar.

 

caminho

O caminho no servidor aonde o cookie estará disponível. Se configurado para '/', o cookie estará dosponível para todo o domínio. Se configurado para o diretório '/foo/', o cookie estará disponível apenas dentro do diretório /foo/ e todos os subdiretórios como /foo/bar do domínio . O valor padrão é o diretório atual aonde o cookie está sendo configurado.

 

domínio

O domínio para qual o domínio estará disponível. Para fazer com que ele esteja disponível para todos os subdomínios de example.com então você deve configurar ele para '.example.com'. O . não é obrigatório mas faz com que seja compatível com mais navegadores. Configurando ele para www.example.com ele fará com que o cookie esteja disponível somente para o subdomínio www. Veja a especificação de 'tail matching' em » spec para maiores detalhes.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara seria isso?

 

setcookie("CookieTeste", $value, time()+3600, "/blog/", ".dominio.com", 1);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei como você precisa, mas fazendo assim:

- Só estará disponível da pasta blog para frente

- Só estará disponível no domínio dominio.com.br e seus subdomínios

 

É assim que você precisa?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.