Задать вопрос

Почему использование session.use_strict_mode возвращает 2 сессионные куки?

Имеется свежий php 5.5.7.
Столкнулся с проблемой, когда выставил параметр в настройках php.ini use_strict_mode=1.
Когда лезу без старой сессии, то сервер отвечает двумя сессионными куками:
> GET / HTTP/1.1
> User-Agent: curl/7.32.0
> Host: gate
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
< Server: nginx/1.4.1
< Date: Mon, 30 Dec 2013 09:36:52 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: token=augfa22hm7dh075esvb5n83mf0
< Set-Cookie: token=42jrgfrnrp40lmbo8hbd0ufg40
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache

В процессе дебага было выявлено, что это особенность именно реализации в php, т.е. эти куки появляются сразу после единичного вызова session_start().
Вторая кука - валидная, годится для использования сессии и при дальнейшей работе с сессией проблемы нет.
Можно конечно переписать валидацию на клиентской стороне или отказаться вообще от данного режима, но не хотелось бы с учётом того, что этот функционал вроде как избавляет от одной потенциальной уязвимости. Подробнее написано тут https://wiki.php.net/rfc/strict_sessions
  • Вопрос задан
  • 3521 просмотр
Подписаться 6 Оценить Комментировать
Решения вопроса 1
Mike77
@Mike77
lamp sf2 yii разработчик
попробуй пересобрать
вот патч для 5.5.3
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index e5733b4..004d9d4 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -338,13 +338,13 @@ PS_READ_FUNC(files)
                 if (!PS(id)) {
                         return FAILURE;
                 }
- php_session_reset_id(TSRMLS_C);
                 if (PS(use_cookies)) {
                         PS(send_cookie) = 1;
                 }
+ php_session_reset_id(TSRMLS_C);
         }

- ps_files_open(data, key TSRMLS_CC);
+ ps_files_open(data, PS(id) TSRMLS_CC);
         if (data->fd < 0) {
                 return FAILURE;
         }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы