Problema Curl
Boa tarde.
Estou com um problema.
O que preciso fazer:
Preciso enviar dados (login e senha) para uma página que irá recebê-los por POST. Esta página processa os dados enviados e inicia uma sessão (loga o usuário). Depois de logado aparecerá uma lista de links para o usuário e ele escolherá em qual clicar (mantendo a sessão).
O que está acontecendo:
>
1. Está enviando os dados certinho.
2. A página recebe os dados certinho, processa e loga o usuário.
3. Exibe a lista de links, mas quando clico (manualmente) em algum link, a sessão expira.
4. Se eu colocar este mesmo caminho acima, que tentei acessar manualmente, via código PHP, ele me exibe os dados da página desejada.
Resumindo:
O que preciso fazer é um simples link para <aplicacao tal> e quando o usuário clicae no link, o php já envia o usuário para página desejada passando os dados de login e depois ele continua navegando normal pelo site (o php apenas enviará os dados de login, depois a navegação continua normal).
O que acontece:
Depois de autenticado via CURL, se eu continuar a acessar qualquer página pelo php e fazendo outras chamadas CURL, ele exibe-as corretamente, mas se for clicar em algum link diretamente pelo navegador (o que o usuário fará), ele perde a sessão.
Aparenta que, ele loga no backend e mantém a sessão, mas esta sessão não está disponível no frontend.
O código:
<?php
ini_set( 'display_errors', TRUE );
error_reporting( E_ALL | E_STRICT );
/*
session_start();
$cookie = session_name()."=".session_id()."; path=".session_save_path();
session_write_close();*/
// Dados
$urlLogin = 'http://paginaLogin';
$urlPagina = 'http://paginaPosLogin';
$post = 'log=usuario&sen=senha';
// Vai no site a primeira vez pra buscar os dados de cookie/session
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $urlLogin);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
curl_close($curl);
// Cookies
preg_match_all('|Set-Cookie: (.*);|U', $data, $matches);
$cookie = implode(';', $matches[1]);
// Vai no site a segunda vez passando os parametros de login
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_REFERER, $urlLogin);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Pragma: no-cache", "Cache-Control: no-cache"));
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // this line makes it work under
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);// Coloquei das 4 formas porque não sei qual funciona
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);// Define o tipo de transferência (Padrão: 1)
// Executa a requisição (pagina de login)
$conteudo1 = curl_exec($ch);
// Define uma nova URL para ser chamada (após o login)
curl_setopt($ch, CURLOPT_URL, $urlPagina);
// Executa a segunda requisição (pagina pós login)
$conteudo2 = curl_exec ($ch);
// Direciona para a pagina (está comentado porque quando direciono ele dá a mensagem "sessao expirada")
//header('location: '.$urlPagina);
// Exibe erros se tiver
echo curl_error($ch);
// Encerra o cURL
curl_close ($ch);
// Pagina de Login
echo $conteudo1;
// Pagina Pós Login
echo $conteudo2;
?>
Pergunto, há como fazer isso??
(não sei exatamente como funciona, mas não tenho convicção que seja possível isso. Uma vez que não podemos pegar pelo Firefox a sessão aberta pelo IE, talvez não seja possível continuar "manualmente" a sessão iniciada pelo PHP)
Alguém já passou por isso ou sabe como resolver?
Discussão (1)
Carregando comentários...