Cookie-файли не синхронізувати між частинами сайту HTTP і HTTPS

Я використовую CakePHP (v 1.3) і компонент Auth. Відтепер всі файли cookie не використовуються між HTTP та HTTPS.

Наприклад, користувач може входити в систему за допомогою HTTP, а не входити в систему за допомогою протоколу HTTPS або ще гіршого користувача. А можна ввійти в систему за допомогою HTTP, і користувач B може входити в систему за допомогою протоколу HTTPS.

Це відбувається і для інших речей (наприклад, елементів у кошику)

Я не знаю, що відбувається, або як це виправити.

Що мені потрібно зробити, щоб вони мали однакові файли cookie на HTTP і HTTPS?

0
Швидше за все, це є причиною проектування. Загалом, запити, надіслані HTTP або HTTPS, можуть містити різні вміст сайту.
додано Автор Eugene Mayevski 'Allied Bi, джерело

2 Відповіді

Модифікація основного коду в більшості випадків є поганою, і у вашому випадку є можливість робити те, що вам потрібно, але шлях до тортів.

У 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'); 

У програмі/конфігурації: створіть файл 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); 

Також слід пам'ятати, що якщо ви встановлюєте, що ваші файли cookie не захищені, більша частина переваги використання протоколу HTTPS відсутня, оскільки для HTTPS та HTTP використовується той самий файл cookie, що його легко вкрасти а потім викрасти сеанс для HTTPS.

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

У app_controller.php:

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

І в програмі/конфігурації створіть інший файл з назвою * 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
додано
Чи зможуть вони переглядати їх https-файли cookie на http? Наприклад, я не хочу показувати їм свою інформацію про профіль через http, однак, якщо вони ввійшли в систему, то я не хочу показувати посилання "Увійти" на http, а замість посилання "Мій обліковий запис".
додано Автор JD Isaacks, джерело
Ні. Безпечний файл cookie ніколи не надсилається на http-адресу, щоб запобігти його незахищеним передачею. Щоб зробити те, що ви хочете, ви можете переспрямовувати користувача після успішного входу на спеціальну сторінку http, яка буде корисною лише для встановлення зміненої http-сесії, щоб вказати, що користувач входить до системи. І використовуйте ту саму ідею, щоб видалити цю змінну, коли користувач виходить із системи Але я не впевнений, чи зможе браузер скаржитися, якщо заголовок місця розташування переспрямовує з https на http.
додано Автор nIcO, джерело

Ймовірно, це викликано захищеними файлами cookie, які надсилаються лише тоді, коли доступ до сторінки над https. Якщо сторінка використовується через https, CakePHP автоматично встановлює session.cookie_secure.

To disable this behaviour, change ini_set('session.cookie_secure', 1); to ini_set('session.cookie_secure', 0); inside cake\libs\cake_session.php

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

0
додано
Я вже це роблю це, хоча, для всіх сторінок користувача в моєму beforeRender (), якщо сторінка http переспрямовує на https. Тому я не знаю, що робити.
додано Автор JD Isaacks, джерело
дякую, що вказуєте на мене там. Я намагаюся підтвердити, що це вирішує проблему. :)
додано Автор JD Isaacks, джерело
Спробуйте зробити те, що рекомендується в прийнятій відповіді, тут: stackoverflow.com/questions/308659/…
додано Автор Petr, джерело
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram