Версия PHP 5.4.41 Версия Apache 2.2.15 Linux версия 2.6.32 CentOS 6.6
У меня есть код, который не перенаправляет должным образом. Здесь много кода и настроек, поэтому я постараюсь сделать его как можно проще. Моя сессия постоянно теряется после перенаправления заголовка. Ошибок и предупреждений нет ... перенаправление проходит нормально. Я session_start (); и var_dump [$ _ SESSION] на странице после перенаправления, чтобы получить NULL. Если я использую session_start и делаю дамп прямо перед перенаправлением, сессия дамп будет нормально. Я предполагаю, что это как-то связано с тем, что htaccess mod_rewrites сбрасывает сеанс между страницами, но я не уверен, как это исправить. Я продолжаю читать, чтобы добавить [L, QSA], но это не помогает. Сеансы отлично работают для простых страниц на том же сервере, которые не используют mod_rewrites.
Я думаю, что домен такой же, если посмотреть, как он происходит: http: // localhost: 8000 / web / someus / логин http: // локальный: 8000 / web / someus / home
Я рекурсивно изменял и изменял всю папку www, чтобы apache имел все разрешения и владел всем на сайте.
Файл .htaccess выглядит так:
RewriteCond %{REQUEST_URI} !=/web/[a-z0-9]{6}/index.php
RewriteCond %{REQUEST_URI} !error [NC]
RewriteCond %{REQUEST_URI} !css [NC]
RewriteCond %{REQUEST_URI} !images [NC]
RewriteCond %{REQUEST_URI} !js [NC]
RewriteRule ^([a-z0-9]{6})/(.*)$ /web/index.php?id=$1&page=$2 [L,QSA]
httpd.conf имеет DocumentRoot:
DocumentRoot "/var/www/html"
В httpd.conf настроен псевдоним, который выглядит так:
Alias /web /var/www/html/website/
<Directory "/var/www/html/website/">
AllowOverride All
Order allow, deny
Allow from all
</Directory>
в php.ini включен output_buffering.
session.cookie_path = /var/www/html/session
session.use_cookies = 1
session.use_only_cookies = 1
Перенаправление заголовка выглядит так, как если бы значение $ url, содержащее 'home', заменяло логин на home в URL-адресе:
header("Location: $url",true,302);
exit();
Когда я заворачиваю -i на главной странице
Я получил:
HTTP/1.1 302 Found
Date: Wed, 10 Jun 2015 21:54:38 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.41
Set-Cookie: PHPSESSID=08079c815224b0b129d566dc274e0081; path=/web/someus; domain =127.0.0.1; secure
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
Set-Cookie: PHPSESSID=ebde43200c30ad6ac18e88b8bfb71371; path=/web/someus; domain =127.0.0.1; secure
Set-Cookie: PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/web/ webdmo; domain=127.0.0.1; secure; httponly
Location: login
Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-WebKit-CSP: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Strict-Transport-Security: max-age=631138519; includeSubDomains
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
Когда я скручиваю -i на странице входа, которая перенаправляет на домашнюю страницу
Я получил:
HTTP/1.1 200 OK
Date: Wed, 10 Jun 2015 21:58:21 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.41
Set-Cookie: PHPSESSID=d79a57eaabb9a41e99f4e0dda202a598; path=/web/someus; domain=127.0.0.1; secure
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
Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-WebKit-CSP: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Strict-Transport-Security: max-age=631138519; includeSubDomains
Content-Length: 2890
Connection: close
Content-Type: text/html; charset=UTF-8
Я думаю, что интересно, что домен 127.0.0.1 безопасен в одном, а не в другом - я не уверен, имеет ли это какое-либо отношение к этому.
Догадаться. Я думаю, это была комбинация проблем. Два ответа (с использованием хоста localhost и смешанных файлов cookie.path), вероятно, были его частью вместе с плохим Конфигурация SSL сброс сеанса на редирект. Большое спасибо за помощь!
Ты сбиваешь с толку session.cookie_path
который установлен на /var/www/html/session
с участием session.save_path
.
См. Определения по приведенным выше ссылкам. Ты наверное хочешь session.save_path
быть /var/www/html/session
и оставьте путь cookie в покое.
Путь к файлам cookie сеанса сообщает браузеру, что эти файлы cookie должны использоваться только для определенных путей URL на вашем сайте.
Например, если я установил cookie с session.cookie_path
из /web/someus
а потом попытался навестить /web/somethingelse
, ранее установленный файл cookie не будет отправлен, поскольку его нет в пути /web/someus
.
Если вы оставите путь cookie по умолчанию /
то cookie сеанса будет отправлен после перенаправления.