Как аутентифицировать Socket.IO по идентификатору сеанса PHP в разных доменах

У меня есть установка node/Socket.IO на node.mydomain.com и стек Apache/PHP на www.mydomain.com.

В настоящее время я делаю аутентификацию примерно так:

  1. Клиент: при подключении отправьте на сервер пользовательское событие authorization, включающее PHPSESSID.
  2. Сервер: на authorization сделайте вызов api.php, используя этот файл cookie, чтобы получить информацию о пользователе, отправьте клиенту эту идентификационную информацию.
  3. Клиент: теперь может выполнять действия, используя это удостоверение.

Это немного неудобно, поскольку в Socket.IO есть место для аутентификации (на этой вики), который я хотел бы использовать. Проблема в том, что я не знаю, как отправить информацию о файлах cookie PHPSESSID с клиента на сервер. Они находятся в разных доменах, поэтому браузер не включает их в запрос.

Любые идеи?


person Alexi Kostibas    schedule 02.11.2011    source источник


Ответы (1)


Я бы порекомендовал переключить обработку сеанса и вместо этого использовать Redis, который также быстрее, чем обработка сеанса на основе файлов по умолчанию.

Сначала установите сервер Redis. После этого вы добавляете расширение phpredis в PHP, сначала скомпилировав его, а затем настроив php.ini для его использования. .

extension=redis.so
session.save_handler = redis
session.save_path = "tcp://localhost:6379/"

Затем из Node.js вы можете прочитать эти сеансы с помощью модуля node_redis.

person Tobias Sjösten    schedule 21.04.2012
comment
Это именно то, что я делаю. Но помните, что вы всегда должны отправлять идентификатор сеанса через https экземпляру узла! - person jonathancardoso; 30.01.2014