CodeIgniter - удаляет ли мои пользовательские данные сеанса Facebook? - PullRequest
3 голосов
/ 23 октября 2009

Мне интересно, есть ли способ сбросить все значения

$this->session->userdata() 

чтобы я мог устранить неполадки?

Я работаю в Facebook, у меня есть страница входа в систему, и как только она будет успешной, я хочу передать UID текущего пользователя, и я подумал, что это будет хорошо работать.

У меня сейчас установлен uid следующим образом:

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');
}

Итак, перенаправление происходит, и у меня есть очень простая настройка в настройках / индексе:

    echo "this is the preferences form <br />";
    echo $this->session->userdata('uid');
    echo $this->session->userdata('session_id');

И результат непостижим:

this is the preferences form
858f500e167e359edc1942a96f3bac35

Так что он полностью пропускает среднее эхо, содержащее uid. Я не настраиваю это правильно? Есть ли способ сбросить все значения массива сессии, чтобы увидеть, что происходит? Любая помощь была бы просто великолепна.

UPDATE

Я запустил var_dump ($ this-> session-> userdata) на каждом необработанном веб-сайте и через Facebook.

На веб-сайте он предоставляет все установленные значения в массиве, содержащем 5 значений (session_id, IP, User_agent, last_activity и uid).

Однако в Chrome Facebook отображаются только 4 значения, установленные CodeIgniter. Я слышал, что куки могут быть только 4 КБ, и шифрование может быть проблемой. Может ли FB заполнять куки своими собственными зашифрованными (читай: большими) данными?

ОБНОВЛЕНИЕ 2

Когда я закомментирую редирект и просто получаю:

  else {
  $this->session->set_userdata('uid', $user_id);
  echo ':test_'.$this->session->userdata('uid').'_test:';
  //redirect('/preferences/index/', 'location');
  }

Покорно возвращает: test_1234_test: в Facebook. Таким образом, где-то во время перенаправления теряется эта часть массива (но не весь массив).

Возможно, это просто создание нового сеанса на странице перенаправления? Так вот почему он имеет только четыре «биржевые» переменные? Если это так, мне нужно изучить, как он создает сеансы, и если Facebook удалит куки, я полагаю.

ОБНОВЛЕНИЕ 3

Поэтому я перешел к использованию БД для хранения информации о сеансе вместо файлов cookie, думая, что FB либо удаляет их, либо сталкивается с ними. В настоящее время у меня установлено приложение до

  1. Установить $ user_id = 1234
  2. $ this-> session-> set_userdata ('uid', $ user_id)
  3. Перенаправление на новую страницу
  4. Var_dump вся возможная информация

Что происходит в БД: БД записей http://nikolausjj.facebook.joyent.us/Picture2.png

Таким образом, он создает одну хорошую запись с пользовательскими данными, а затем сразу же после перенаправления создает новый сеанс без распознавания предыдущего. Может кто-нибудь объяснить, где проверяет инфраструктура CI, чтобы увидеть, существует ли предыдущая сессия? Руководство пользователя объясняет это как «волшебство».

Ответы [ 2 ]

1 голос
/ 23 октября 2009

Вы можете использовать var_dump() для вывода сеанса. Как то так

var_dump($this->session);

Вызов set_userdata выглядит нормально. Вы уверены, что $user_id установлено? Потому что эхо выполняется surley, но uid не установлено или не установлено в пустую строку.

Попробуйте заменить эхо на

echo ':test_'.$this->session->userdata('uid').'_test:';

Другая информация, полезная для ответа

  • Какой браузер вы используете?
  • У вас есть подчеркивание _ в вашем доменном имени?
  • Используете ли вы сеансы CI или какую-то оболочку для нативных PHPsessions
  • Значение uid также теряется / не устанавливается при комментировании перенаправления?

Другие предложения:

  • попробуйте redirect('/preferences/index/', 'refresh'); вместо location
  • Я не знаком с разработкой в ​​Facebook, но находится ли /preferences/index под вашим контролем? Если да, попробуйте удалить (если имеется) $this->load->library(‘session’) и вместо этого загрузить его в autoload.php.
  • попробуйте изменить $config[‘sess_match_ip’] на `FALSE
  • попробуйте установить $config[‘sess_encrypt_cookie’] в ЛОЖЬ
  • попробуйте заменить использование CI-Session на CI Native session
  • Является ли UID разумной информацией, если не хранит ее в файле cookie. Если это имеет значение, если это может быть подделано, не.
0 голосов
/ 27 октября 2009

Я не решил, как передавать переменные сеанса с одной страницы на другую через Facebook. Мое решение состояло в том, чтобы просто вызывать API Facebook для UID пользователя снова на каждой странице. Не очень хорошее программирование, но у меня оно работает нормально. : - /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...