Создание куки, позвонив на сайт PHP из Node API - PullRequest
0 голосов
/ 18 февраля 2020

У нас есть текущий веб-сайт в PHP. В настоящее время мы обновляем его в Node. Мы будем обновлять его шаг за шагом, поэтому у нас будет несколько страниц в PHP и некоторые другие в Node. Проблема в том, что когда пользователи будут подключаться, мы должны убедиться, что у них есть сеанс как в PHP, так и в Node, поэтому им не нужно будет подключаться дважды.

В PHP мы создаем готовку PHPSESSID ie и мы храним все данные в файле сессии в / tmp. В Node мы используем токен JWT.

Что я пытаюсь достичь прямо сейчас: когда пользователь соединяется со страницей, которая запускается на Node, он должен создать PHPSESSID cook ie и файл сеанса. поэтому, когда он перейдет на другую страницу, которая работает на PHP, он все равно будет подключен.

Веб-сайт PHP и Node API имеют одинаковый домен, но работают на другом порту.

Прямо сейчас мой код выполняет следующие действия:

  • Я вызываю функцию signIn из Node API
  • Создает токен JWT, и пользователь правильно подключается в Node * 1014. *
  • Я называю PHP веб-сайт следующим образом: http://www.mysite.local/ajax/login?user=user&pass=pwd
  • Правильно создает файл сеанса
  • Создает PHPSESSID cook ie

Но когда я проверяю куки моего домена, PHPSESSID не появляется. Но это происходит после того, как я его создаю и печатаю $ _COOK IE in PHP. И из-за этого PHP не может найти никакого повара PHPSESSID ie и не может получить доступ к файлу сеанса.

Я использую Node с GraphQL и Apollo и PHP с Zend Framework 1.12

Вот как я звоню PHP с узла:

const url = `http://www.mysite.local/ajax/login?email=${data.email}&password=${data.password}`
const headers = {
  Referer: 'http://www.mysite.local/auth'
}
await fetch(url, { method: 'GET', headers: headers })

Сеансы в PHP управляются Zend

Я тестирую на Firefox .

1 Ответ

1 голос
/ 19 февраля 2020

HTTP-куки работают следующим образом:

  1. Клиент отправляет HTTP-запрос на сервер
  2. Сервер отвечает HTTP-ответом, который включает в себя Set-Cookie заголовок
  3. Затем клиент сохраняет повар ie

Позже клиент отправляет еще один HTTP-запрос на тот же сервер. Поскольку у него есть сохраненный повар ie, повар ie включает в заголовки запроса.


Браузеры, как правило, автоматически сохраняют файлы cookie. (Существуют некоторые крайние случаи, например, Ajax запросы, обрабатывающие только файлы cookie в запросах с несколькими источниками, если withCredentials включен).

Код на стороне сервера, как правило, не автоматически хранить куки. При работе с серверным кодом вам обычно нужно явно обращаться с файлами cookie, обычно путем настройки библиотеки jar Cook ie (например, fetch-cookie).


  1. Вы делаете HTTP-запрос от браузера к Node.js.
  2. Node.js делает HTTP-запрос к PHP.
  3. PHP отвечает поваром ie (Я предполагаю)
  4. Node.js игнорирует повара ie
  5. Node.js отправляет HTTP-ответ браузеру
  6. Браузер получает HTTP-ответ (без заголовка Set-Cookie в нем).

Node.js ни в коем случае не читает ни повар ie из запроса, который он сделал PHP, ни копирует этот повар ie в ответе он отправляет браузеру.

Это то, что вам нужно сделать.

(И тогда вам нужно будет продолжать передавать запросы прокси к PHP через Node.js потому что повар ie, сохраненный в браузере, будет связан с сервером Node.js.

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