Применить идентификатор сеанса из заголовка запросаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Применить идентификатор сеанса из заголовка запроса

Сообщение Anonymous »

Я не уверен, возможно ли это в Symfony, поэтому у меня возник вопрос. Сценарий высокого уровня:
  • Запрос к API (встроенному в Symfony) должен возвращать session-id в теле ответа
  • Источник запроса должен включать возвращенный session-id в свой заголовок для последующего запроса
  • API должен проверять, имеют ли заголовки запроса session-id, если он должен установить этот сеанс в сеансе Symfony
В целях тестирования я использую два клиента REST для экземпляра браузера:
  • Postman (Chrome)
  • HttpRequester (Firefox)
Вот подход к коду, который я сделал:

Запрос от почтальона:

Код: Выделить всё

POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value"
}
Используя сеанс HTTPFoundation, я установил сеанс:

Код: Выделить всё

$session = new Session();
$session->set('session-id', $session->getId());
$session->set('timestamp', time());
Тогда верните, вот ответ:

Код: Выделить всё

200 OK
Content-Type:  application/json
{
"session-id": "1a69f956b8efc5ab465356e3257a3230",
"timestamp": 1487850859
}
Теперь, чтобы имитировать другой ответ из другого экземпляра, я использую HttpRequester, но с session-id в заголовке:

Код: Выделить всё

POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value",
"session-id": "1a69f956b8efc5ab465356e3257a3230"
}
Имея другой экземпляр запроса, я ожидаю, что Symfony сгенерирует новый сеанс (новое значение временной метки). Но в моем случае я хотел установить идентификатор сеанса, указанный в заголовке запроса, чтобы иметь доступ к предыдущей метке времени, возвращенной в предыдущем ответе.

Я создал событие ядра, чтобы перехватить запрос и проверить, имеет ли запрос session-id, а затем выполнить настройку сеанса.

Код: Выделить всё

// Get all PHP global variables
$request = Request::createFromGlobals();

// Check if the request
if ($request->headers->has('session-id')) {
$session = new Session();
$session->setId($request->headers->get('session-id'));
}
Однако, если я это сделаю, я получу ошибку:

Код: Выделить всё

"error": {
"code": 500,
"message": "Internal Server Error",
"exception": [
{
"message": "Cannot change the ID of an active session",
"class": "LogicException",
...
Что я пропустил? Возможно ли это?

Подробнее здесь: https://stackoverflow.com/questions/424 ... est-header
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»