Файлы cookie не синхронизированы между частями сайта HTTP и HTTPS. - PullRequest
0 голосов
/ 28 октября 2011

Я использую CakePHP (v 1.3) и компонент Auth. Прямо сейчас все куки не находятся в snyc между HTTP и HTTPS.

Например, пользователь может войти в систему по протоколу HTTP и не войти в систему по протоколу HTTPS, или, что еще хуже, пользователь A может войти в систему по протоколу HTTP, а пользователь B может войти в систему по протоколу HTTPS.

Это происходит и для других вещей (например, в корзине)

Понятия не имею, что происходит или как это исправить.

Что мне нужно сделать, чтобы они имели одинаковые куки на HTTP и HTTPS?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Изменение кода ядра в большинстве случаев является плохой вещью, и в вашем случае есть возможность делать то, что вам нужно, но в порядке Cake.

В app / config / core.php:измените Session.save значение

//Configure::write('Session.save', 'php');

//this will look for a 'mysession.php' file in app/config
Configure::write('Session.save', 'mysession'); 

В приложении / config: создайте mysession.php файл с параметрами, которые вы хотите для своей сессии

ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie'));
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 
ini_set('session.cookie_path', $this->path);

//overwrite Cake setting already set by CakeSession 
ini_set('session.cookie_secure', 0); 

Также имейте в виду, что если вы установите свои куки-файлы как небезопасные, большинство преимуществ использования HTTPS пропадет, потому что, поскольку тот же куки-файл сеанса используется для HTTPS и HTTP, он становитсялегко украсть его, а затем украсть сеанс для HTTPS.

У меня был случай веб-приложения с административной частью через HTTPS и публичной частью через HTTP, который также требовал сессии.Мне удается разделить обе части, указав два разных имени файла cookie:

В app_controller.php:

if(env('HTTPS')
{
    Configure::write('Session.save', Configure::read('Session.save') . '_https');
}

А в app / config создайте еще один файл с именем * mysession_https.php * с помощью

ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie') . 'S');

//cookie destroyed when users close their browser 
ini_set('session.cookie_lifetime', 0); 

ini_set('session.cookie_path', $this->path);

ini_set('session.cookie_secure', 1); 

Это создает два разных сеанса, один по HTTP и один по HTTPS, но в моем случае это было нормально, поскольку все конфиденциальные или личные данные передаются по HTTPS, а часть по HTTP требует только сеанс для полученияболее плавная навигация.

0 голосов
/ 28 октября 2011

Вероятно, это вызвано безопасными файлами cookie, которые отправляются только при доступе к странице через https.Если к странице обращаются через https, CakePHP автоматически устанавливает session.cookie_secure.

Чтобы отключить это поведение, измените ini_set('session.cookie_secure', 1); на ini_set('session.cookie_secure', 0); внутри cake\libs\cake_session.php

Я бы порекомендовал разобраться с этим на стороне приложения и разрешить вход (и все страницы участника)только через https.

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