CodeIgniter - Os meus dados de sessão personalizados sendo despojado pelo Facebook?
-
05-07-2019 - |
Pergunta
Eu estou querendo saber se há uma maneira para despejar todos os valores de
$this->session->userdata()
para que eu possa solucionar?
Eu estou trabalhando dentro de Facebook, e tem uma página de login, e uma vez que é bem sucedida eu quero passar ao redor do UID do usuário atual, e eu pensei que isso iria funcionar bem.
Eu tenho atualmente o conjunto uid da seguinte forma:
require_once 'facebook.php';
$appapikey = 'XXXX';
$appsecret = 'XXXX';
$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();
$this->db->like('uid', $user_id);
$this->db->from('users');
$has_signed_up = $this->db->count_all_results();
if ($has_signed_up == 0) {
redirect('/setup/signup/', 'location');
}
else {
$this->session->set_userdata('uid', $user_id);
redirect('/preferences/index/', 'location');
}
Assim, o redirecionamento ocorrer, e eu tenho uma configuração muito simples sobre a preferências / index:
echo "this is the preferences form <br />";
echo $this->session->userdata('uid');
echo $this->session->userdata('session_id');
E o resultado é uma inescrutável:
this is the preferences form
858f500e167e359edc1942a96f3bac35
Por isso, totalmente salta sobre o eco meio contendo o uid. Que não estou definindo isso corretamente? Existe uma maneira para despejar todos os valores do array de sessão para ver o que está recebendo através? Qualquer ajuda seria ótimo.
Atualizar
Eu tenho que correr var_dump ($ this-> session-> userdata) em cada site cru e através do Facebook.
No site que expõe todos os valores definidos em uma matriz contendo 5 valores (session_id, IP, USER_AGENT, last_activity, e uid).
Dentro do cromo Facebook no entanto, ele só mostra os 4 valores fixados pelos CodeIgniter. Eu ouvi os cookies só pode ser 4k e que a criptografia pode ser um problema. Poderia FB ser enchendo os cookies com o seu próprio (leia-se: maior) criptografado? Dados
UPDATE 2
Quando eu comentar o redirecionamento, e apenas se:
else {
$this->session->set_userdata('uid', $user_id);
echo ':test_'.$this->session->userdata('uid').'_test:';
//redirect('/preferences/index/', 'location');
}
Ele obedientemente retorna: test_1234_test: dentro do Facebook. Então, em algum lugar durante o redirecionamento é perder esta parte do array (mas não toda a matriz).
É possivelmente apenas criar uma nova sessão na página de redirecionamento? Então é por isso que só tem quatro variáveis ??"stock"? Se este for o caso, eu vou ter de pesquisar como ele cria as sessões, e se Facebook apaga os cookies suponho.
Update 3
Então eu virei para utilizar um banco de dados para armazenar informações de sessão em vez de cookies, pensando FB foi ou retirando-os ou colidir com eles. Eu tenho atualmente o aplicativo criado para
- Set $ ??user_id = 1234
- $ this-> session-> set_userdata ( 'uid', $ user_id)
- Redirecionar para a nova página
- var_dump possível de informações
O que ocorre no DB é esta: DB registra http://nikolausjj.facebook.joyent.us/Picture2.png
Assim, ele cria um registro bom, com os dados do usuário, em seguida, imediatamente após o redirecionamento cria uma nova sessão sem reconhecer o anterior. Alguém pode explicar onde os controlos quadro CI para ver se ele tem uma sessão anterior existente? O manual do usuário explica-lo como "mágica" basicamente.
Solução
Você pode usar var_dump()
para a saída da sessão. Algo como isto
var_dump($this->session);
A chamada set_userdata
parece ok. Tem certeza $user_id
está definido. Porque o eco é surley executado, mas uid
não está definido ou conjunto de cadeia vazia.
Tente substituir o eco com
echo ':test_'.$this->session->userdata('uid').'_test:';
Outra informação útil para responder
- O navegador você está usando?
- Você tem uma
_
sublinhado no seu nome de domínio? - Você está usando sessões CI ou algum invólucro para PHPsessions nativos
- É o valor para
uid
também perdeu / não definido quando você comentar o redirecionamento?
Outras sugestões:
- Tente
redirect('/preferences/index/', 'refresh');
vez delocation
- Eu não estou familiarizado com o desenvolvimento facebook mas é
/preferences/index
sob seu controle? Se sim tente remover (se houver)$this->load->library(‘session’)
e em vez carregá-lo noautoload.php
. - tente alterar
$config[‘sess_match_ip’]
para `false - tente definir
$config[‘sess_encrypt_cookie’]
para FALSE - tente substituir o uso de CI-Session com CI Native sessão
- é UID informações sensata se não armazená-lo em um cookie. Se é importante se ele pode ser falsificado não.
Outras dicas
Eu não resolveu como passar variáveis ??de sessão a partir de uma página para outra via Facebook. Minha solução foi simplesmente para chamar a API do Facebook para o UID do usuário novamente em cada página. Não grande programação, mas funciona bem para mim. : - /