Печыва з сінхранізацыі паміж HTTP і HTTPS часткамі сайта

Я выкарыстоўваю CakePHP (v 1.3), а кампанент Auth. Цяпер усё печыва ня snyc паміж HTTP і HTTPS.

Напрыклад, карыстальнік можа ўвайсці ў сістэму, на HTTP і не ўвайшлі ў сістэму на HTTPS або нават горш карыстальнік А можа быць зарэгістраваным на HTTP і карыстальніка B можа быць зарэгістраваным на HTTPS.

Гэта адбываецца для іншых рэчаў (напрыклад, прадметаў у кошыку)

Я паняцця не маю, што адбываецца і як гэта выправіць.

<�Моцны> Што мне трэба зрабіць так, каб яны маюць тыя ж печыва на HTTP і HTTPS?

0
Хутчэй за ўсё, гэта канструктарская прычына ў агульных запытах, што пасылаецца HTTP ці HTTPS можа прадстаўляць рознае ўтрыманне сайта.
дададзена аўтар Eugene Mayevski 'Allied Bi, крыніца

2 адказы

Змяненне асноўнага кода з'яўляецца вялікай часткай часу дрэнны рэчы, і ў вашым выпадку, ёсць магчымасць рабіць тое, што вам трэба, але торт спосабам.

У дадатак/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); 

Таксама майце на ўвазе, што калі вы ўсталюеце печыва быць не бяспечна, большасць пераваг выкарыстання HTTPS няма, таму што, як жа печыва сесіі выкарыстоўваецца для HTTPS і HTTP, становіцца лёгка скрасці а затым скрасці сесію HTTPS, а таксама.

У мяне быў выпадак з вэб-дадатак адмін часткі над HTTPS і публічнай часткі па HTTP, якія патрабуюць сеансу, а таксама. Мне атрымоўваецца аддзяліць абедзве часткі, паказаўшы дзве розныя назвы печыва:

У 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 печыва на HTTP? Напрыклад, я не хачу, каб паказаць ім свой профіль інфармацыі па пратаколе HTTP, аднак, калі яны ўвайшлі ў сістэму, то я не хачу, каб паказаць «лагін» спасылку на HTTP але замест «Мой рахунак».
дададзена аўтар JD Isaacks, крыніца
Не. Бяспечнае печыва ніколі не адпраўляюцца на HTTP URL, каб прадухіліць яго неабароненую перадачу. Для таго, каб рабіць тое, што вы хочаце, вы маглі б, магчыма, перанакіроўваць карыстальніка толькі пасля паспяховага ўваходу ў спецыяльны HTTP старонку, якая будзе толькі карысна ўсталяваць зменную сеансу HTTP, каб паказаць, карыстальнік увайшоў у сістэму. І выкарыстоўваць тую ж ідэю, каб выдаліць гэтую зменную пры карыстальнік выходзіць з сістэмы. Але я не ўпэўнены, калі браўзэр будзе скардзіцца, калі ён атрымлівае загаловак размяшчэння перанакіравання з HTTPS на HTTP.
дададзена аўтар nIcO, крыніца

Гэта, верагодна, выклікана абароненых печыва, якія адпраўляюцца толькі тады, калі доступ да старонкі праз 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, крыніца