2015-03-08 2 views
1

Я пытаюсь использовать активные сеансы (начало в PHP) в node.jsРабота с PHP сессий (хранится в MYSQL) в Node.js

Для PHP я храню сессий в MySQL (используя session_set_save_handler, как описано в http://phpsecurity.org/code/ch08-2). Работает отлично для PHP.

Теперь планируется:

1) со стороны клиента PHP приложения "выполнить" node.js ссылку с PHPSESSID печенья клиента в ГЭТ:

http://192.168.0.222:53077/?phpsession=02isg9kv8fbveqhmt1htcj6cc7 

2) на стороне сервера Node.js получить PHPSESSID , обратите внимание на это значение в MySQL сессий таблице

3), если значение PHPSESSID существует в MySQL - читать ИД пользователя, имя и другие данные пользователя хранятся в MySQL (таблицы сеансов)

Вопрос - Правильно ли это? Я думаю, что я ошибаюсь, по крайней мере, с шага 2. Каков правильный способ работы в Node.js с сеансами, хранящимися в mysql, начиная с php?

Прошу не советовать мне хранить сеансы в memcached или redis, я выбрал mysql.

+1

Передачи маркера сеанса через URL может сделать ваши пользователь особенно уязвимым для перехвата сеанса (будет отображаться в журналах сервера, возможно, в URL-адресах, хранящихся в браузерах, и т. д.). Вместо этого я бы добавил HTTP-заголовок в запрос. – mesch

+0

Я этого ожидал. Собирался спросить об этом, но я ответил уже. Вы советуете мне не использовать GET? Или - используйте GET, но отправляете HTTP-заголовок вместо идентификатора cookie? Не могли бы вы написать небольшой образец? Спасибо, в любом случае. – deeplay

ответ

2

Поскольку вы сами обрабатываете сеансы с помощью session_set_save_handler, вы можете сериализовать данные так, как хотите. Я бы предложил json_encode() для совместимости с nodejs.

PHP дает вашему дескриптору сохранения уже сериализованные данные в виде строки, поэтому вам нужно будет выполнить unserialize() и повторно сериализовать с помощью json_encode. Откорректируйте чтение сеанса blob в json_decode() и serialize() перед возвратом на PHP.

Ваши шаги 1, 2 и 3 кажутся правильными. Более подробные вопросы могут дать лучший ответ.

Я бы посоветовал убедиться, что ваша таблица SQL - это несколько столбцов для хранения сеансов.

  • «created_on» целое число метки времени
  • «updated_on» целое число метки времени
  • «long_term» маленький ИНТ, если пользователь проверил «запомнить меня» или что-то подобное, это должно пропустить нормальный сеанс сбора мусора
  • «ip_addr» может использоваться для предупреждения пользователей о потенциальном захвате сеанса.
  • «агент» может быть md5 или sha1 суммой агента пользователя для обнаружения доступа из различных устройств/браузерами
+0

Спасибо за ответ. Вопрос о json: do u означает что-то вроде этого: 1. in php: 'json_encode()' для хранения данных сеанса в формате json; 2. in node.js: 'json_decode()' для чтения данных сеанса в формате json. Я не могу получить одно главное: мне нужно связать его технологией сеанса с данными, хранящимися в mysql (таблица сеансов)? Или я просто прочитал данные в mysql и использовал его в node.js? И мне нужно использовать в node.js нечто вроде «goran» (найдено в [link] (http://stackoverflow.com/questions/26331228/how-can-i-parse-php-user-details -session-to-node-js-server))? – deeplay

+0

Возможно, вы можете подумать над всей проблемой. Когда вам нужен доступ к данным из сеанса в узле, убедитесь, что у узла есть доступ к идентификатору сеанса, сгенерированному из PHP, и прочитайте таблицу. Единственная проблема заключается в том, что сериализация по умолчанию PHP не может быть проанализирована узлом, поэтому используйте json_encode/decode в PHP при записи в БД. – chugadie

+0

Thx, теперь это понятно для меня! – deeplay

Смежные вопросы