PHP - Поддержание сеанса при перенаправлении с HTTP на HTTPS? - PullRequest
2 голосов
/ 08 июля 2010

Я работаю над простой корзиной. Когда пользователь нажимает кнопку извлечения, URL-адрес изменяется с HTTP на HTTPS. К сожалению, сеанс не переносится, и я получаю ошибки о том, что $ _SESSION ['cart'] (где я храню информацию) не существует.

Я попытался использовать mod_rewrite для перенаправления всего HTTP на HTTPS, чтобы сеанс был все на HTTPS:

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Это сработало. Однако на одной странице есть встроенные Карты Google, и это URL-адрес HTTP, поэтому IE выдает предупреждения о небезопасности некоторых элементов и т. Д.

Итак, мне нужно либо знать, как исключить страницу с перезаписью модов (когда я пытался это сделать, я отправил ее в бесконечный цикл перенаправления), либо поддерживать сеанс между http и https. Спасибо.

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Множество подходов здесь: Сессия потеряна при переключении с HTTP на HTTPS в PHP

Просто при работе с HTTPS в ссылках на странице - Один из способов справиться с этим - это иметьваш абсолютный URL будет определенной константой, которая зависит от того, активен ли SSL.

if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off'){
define('ABS_URL' , 'http://www.your-domain.com'); 
}else if($_SERVER['HTTPS'] == 'on'){
define('ABS_URL' , 'https://www.your-domain.com'); 
}

Затем вы можете заменить ВСЕ экземпляры вашего абсолютного URL на странице оформления заказа на ABS_URL.

1 голос
/ 08 июля 2010

Нет никаких причин, чтобы весь ваш сайт использовал https, вы можете сделать что-то подобное, чтобы перенаправить только нужные страницы на https:

# force https for checkout pages
RewriteCond %{HTTPS} !on
RewriteCond %{SCRIPT_FILENAME} (checkout|register|login).php$
RewriteRule (.*) https://www.example.com/$1 [R,QSA,L]

# non-secure pages
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !(checkout|register|login).php$
RewriteRule (.*) http://www.example.com/$1 [R,QSA,L]

Нет причин, по которым вы не можете получить доступ к набору файлов cookie с httpна защищенной странице я делаю это все время (если только вы не используете безопасные куки-файлы, в этом случае решение состоит в том, чтобы не использовать безопасные куки-файлы или убедиться, что весь ваш магазин использует https).

Кроме того,если вы перенаправляете, скажем, с http://example.com на http://www.example.com, вы потеряете свои куки.

Но, чтобы ответить на ваш вопрос, если вы хотите, чтобы весь ваш сайт использовал httpsкроме страницы карты, вы можете сделать что-то вроде этого:

RewriteCond %{HTTPS} !on
RewriteCond %{SCRIPT_FILENAME} !map.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} map.php
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
...