Pergunta

Eu tenho um aplicativo usando PHP ea API do PayPal. A forma básica funciona para obter um pagamento é que você faz uma chamada de serviço web para o PayPal para obter um token e, em seguida, fazer um redirecionamento do navegador para o PayPal com esse token para o usuário a pagar. Depois que os detalhes de pagamento foram confirmados, PayPal redireciona para a URL que você originalmente definido na chamada de serviço.

Isso tudo funciona, milhões de pessoas usam todos os dias, et cetera.

Estranho coisa é, quando PayPal redireciona de volta, a sessão PHP está desaparecido. É um bem documentado problema .

Primeira pergunta: por que isso está acontecendo? Ambas as páginas estão no mesmo domínio, ambos usam HTTPS. A sessão funciona para todas as solicitações até o redirecionamento de volta PayPal.

O tópico do fórum ligados sugere uma solução alternativa, a persistir o ID da sessão no pedido PayPal e, em seguida, para recuperá-lo mais tarde e restaurar a sessão. Grande, exceto que ele não parece trabalho.

posso adicionar algumas declarações de log:

log(session_id());

antes e depois dos vários redirecionamentos. Quando voltar de PayPal, eu entro um pouco mais.

log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());

O resultado não é nada do que eu esperaria:

session_id é fc8f459a186a3f4695ff9ac71b563825
configurá-lo de volta para 82460dcf8c8ddd538466e7cb89712e72
session_id é agora 360ba3fd99d233e0735397278d2b2e55

Segunda pergunta: porque é que o ID de sessão não em tudo o que eu defini-lo para? O que estou fazendo de errado? Ou, pelo menos, por que nenhuma das variáveis ??de sessão voltar?

Foi útil?

Solução

Apenas uma idéia ...

Você tem conjunto session.referer_check a seu anfitrião talvez? O padrão é a cadeia vazia, mas poderia ter sido mudado ... e quando a página 'volta' do PayPal, php irá lixo as informações de sessão.

Você pode verificar o session.referer_check com phpinfo ().

Outras dicas

Você pode fazer um phpinfo () e dizer se session.auto_start é verdade?

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